/*
 * EEZ Modular Firmware
 * Copyright (C) 2015-present, Envox d.o.o.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <math.h>
#include <memory.h>
#include <assert.h>

#if defined(EEZ_PLATFORM_SIMULATOR) && !defined(__EMSCRIPTEN__)

#include <cmath>
#include <queue>
#include <stdio.h>
#include <SDL.h>
#include <SDL_audio.h>

#elif defined(EEZ_PLATFORM_STM32)

#include <math.h>
#include <dac.h>
#include <tim.h>
#endif

#include <eez/sound.h>
#include <eez/firmware.h>
#include <eez/system.h>
#include <eez/memory.h>
#include <eez/modules/psu/psu.h>
#include <eez/modules/psu/persist_conf.h>
#include <eez/scpi/scpi.h>

#define NOTE_B0 31.0f
#define NOTE_C1 33.0f
#define NOTE_CS1 35.0f
#define NOTE_D1 37.0f
#define NOTE_DS1 39.0f
#define NOTE_E1 41.0f
#define NOTE_F1 44.0f
#define NOTE_FS1 46.0f
#define NOTE_G1 49.0f
#define NOTE_GS1 52.0f
#define NOTE_A1 55.0f
#define NOTE_AS1 58.0f
#define NOTE_B1 62.0f
#define NOTE_C2 65.0f
#define NOTE_CS2 69.0f
#define NOTE_D2 73.0f
#define NOTE_DS2 78.0f
#define NOTE_E2 82.0f
#define NOTE_F2 87.0f
#define NOTE_FS2 93.0f
#define NOTE_G2 98.0f
#define NOTE_GS2 104.0f
#define NOTE_A2 110.0f
#define NOTE_AS2 117.0f
#define NOTE_B2 123.0f
#define NOTE_C3 131.0f
#define NOTE_CS3 139.0f
#define NOTE_D3 147.0f
#define NOTE_DS3 156.0f
#define NOTE_E3 165.0f
#define NOTE_F3 175.0f
#define NOTE_FS3 185.0f
#define NOTE_G3 196.0f
#define NOTE_GS3 208.0f
#define NOTE_A3 220.0f
#define NOTE_AS3 233.0f
#define NOTE_B3 247.0f
#define NOTE_C4 262.0f
#define NOTE_CS4 277.0f
#define NOTE_D4 294.0f
#define NOTE_DS4 311.0f
#define NOTE_E4 330.0f
#define NOTE_F4 349.0f
#define NOTE_FS4 370.0f
#define NOTE_G4 392.0f
#define NOTE_GS4 415.0f
#define NOTE_A4 440.0f
#define NOTE_AS4 466.0f
#define NOTE_B4 494.0f
#define NOTE_C5 523.0f
#define NOTE_CS5 554.0f
#define NOTE_D5 587.0f
#define NOTE_DS5 622.0f
#define NOTE_E5 659.0f
#define NOTE_F5 698.0f
#define NOTE_FS5 740.0f
#define NOTE_G5 784.0f
#define NOTE_GS5 831.0f
#define NOTE_A5 880.0f
#define NOTE_AS5 932.0f
#define NOTE_B5 988.0f
#define NOTE_C6 1047.0f
#define NOTE_CS6 1109.0f
#define NOTE_D6 1175.0f
#define NOTE_DS6 1245.0f
#define NOTE_E6 1319.0f
#define NOTE_F6 1397.0f
#define NOTE_FS6 1480.0f
#define NOTE_G6 1568.0f
#define NOTE_GS6 1661.0f
#define NOTE_A6 1760.0f
#define NOTE_AS6 1865.0f
#define NOTE_B6 1976.0f
#define NOTE_C7 2093.0f
#define NOTE_CS7 2217.0f
#define NOTE_D7 2349.0f
#define NOTE_DS7 2489.0f
#define NOTE_E7 2637.0f
#define NOTE_F7 2794.0f
#define NOTE_FS7 2960.0f
#define NOTE_G7 3136.0f
#define NOTE_GS7 3322.0f
#define NOTE_A7 3520.0f
#define NOTE_AS7 3729.0f
#define NOTE_B7 3951.0f
#define NOTE_C8 4186.0f
#define NOTE_CS8 4435.0f
#define NOTE_D8 4699.0f
#define NOTE_DS8 4978.0f

namespace eez {
namespace sound {

////////////////////////////////////////////////////////////////////////////////

enum {
	CLICK_TUNE,
	SHUTTER_TUNE,
	BEEP_TUNE,
	POWER_UP_TUNE,
	POWER_DOWN_TUNE
};

float g_clickTune[] = {
#if defined(EEZ_PLATFORM_SIMULATOR)
    440.0f, 1.0f / 32.0f,
#else
    860.0f, 0.01f,
#endif
	NAN // end!
};

float g_beepTune[] = {
	NOTE_C6, 1/4.0f,
    NAN // end!
};

float g_powerUpTune[] = {
    NOTE_C6, 1/8.0f,
    NOTE_C6, 1/2.0f,
    NAN // end!
};

float g_powerDownTune[] = {
    NOTE_C6, 1/10.0f,
    NOTE_A5, 1/10.0f,
    NOTE_G5, 1/5.0f,
    NAN // end!
};

#if defined(EEZ_PLATFORM_SIMULATOR) && !defined(__EMSCRIPTEN__)
int16_t g_shutterSamples[] = {
0, -1, 1, 0, 0, 0, 0, -1, 2, -2, 4, -5, 6, -7, 8, -5, 3, 0, -2, 4,
-3, 4, -3, 4, -4, 4, 0, -2, 7, -7, 7, -3, 2, 2, -2, 5, -4, 6, -3, 4,
1, 0, 2, 1, 2, 2, 1, 1, 4, -1, 4, 1, 2, 4, 1, 2, 3, 0, 6, -1,
5, 1, 2, 5, 1, 5, 0, 7, -1, 11, -6, 13, -5, 12, -1, 6, 5, 2, 6, 5,
4, 7, 2, 7, 4, 8, 3, 8, 3, 9, 4, 9, 3, 9, 4, 10, 6, 6, 8, 6,
9, 7, 8, 7, 7, 11, 4, 12, 6, 9, 10, 7, 9, 11, 6, 14, 6, 12, 7, 14,
5, 18, 4, 15, 8, 13, 10, 14, 9, 13, 11, 14, 9, 18, 8, 16, 13, 12, 16, 15,
11, 19, 12, 15, 16, 14, 16, 16, 17, 13, 21, 10, 23, 12, 22, 11, 26, 10, 25, 13,
23, 16, 22, 17, 22, 18, 22, 20, 21, 22, 18, 24, 20, 24, 24, 20, 27, 21, 25, 24,
25, 24, 26, 26, 24, 30, 24, 29, 26, 26, 31, 27, 29, 28, 29, 30, 31, 27, 36, 25,
37, 27, 36, 29, 37, 28, 39, 29, 38, 31, 36, 37, 35, 36, 38, 34, 41, 35, 39, 39,
38, 40, 39, 41, 40, 43, 39, 44, 41, 42, 45, 41, 46, 44, 45, 45, 45, 46, 47, 48,
47, 45, 52, 44, 56, 45, 53, 48, 54, 50, 54, 51, 56, 50, 55, 55, 53, 57, 53, 57,
55, 57, 57, 55, 62, 53, 64, 54, 61, 61, 58, 64, 59, 59, 66, 57, 70, 57, 69, 60,
67, 67, 65, 66, 68, 67, 70, 66, 69, 71, 67, 74, 66, 77, 65, 80, 66, 80, 69, 78,
74, 74, 76, 75, 77, 77, 78, 76, 80, 77, 78, 80, 77, 82, 76, 87, 72, 92, 72, 90,
77, 85, 83, 82, 86, 83, 86, 90, 80, 94, 79, 96, 83, 94, 85, 92, 89, 94, 88, 96,
88, 95, 92, 92, 93, 93, 93, 95, 96, 91, 99, 90, 100, 94, 99, 93, 99, 96, 98, 97,
100, 98, 98, 99, 97, 103, 96, 106, 92, 108, 95, 107, 99, 102, 106, 98, 108, 101, 105, 104,
106, 100, 106, 105, 104, 105, 106, 104, 111, 101, 113, 103, 107, 105, 113, 104, 115, 103, 112, 107,
110, 110, 107, 110, 109, 107, 113, 109, 112, 111, 106, 110, 105, 115, 110, 112, 112, 111, 108, 115,
113, 112, 114, 114, 106, 119, 103, 119, 110, 113, 114, 110, 111, 113, 112, 113, 113, 113, 110, 114,
110, 115, 111, 119, 111, 116, 105, 116, 110, 118, 114, 117, 110, 117, 109, 118, 114, 113, 118, 109,
118, 113, 115, 117, 115, 110, 119, 108, 118, 115, 118, 118, 114, 117, 113, 118, 111, 118, 117, 117,
118, 117, 113, 117, 117, 113, 123, 112, 122, 111, 117, 115, 115, 116, 116, 115, 113, 113, 117, 112,
117, 113, 114, 113, 114, 117, 113, 117, 113, 113, 117, 110, 117, 115, 113, 119, 110, 118, 110, 120,
113, 117, 112, 115, 115, 115, 113, 118, 115, 114, 117, 113, 116, 111, 119, 112, 118, 114, 116, 117,
112, 114, 115, 112, 115, 112, 114, 111, 113, 109, 113, 108, 117, 110, 116, 107, 112, 107, 116, 108,
116, 108, 113, 105, 111, 109, 109, 118, 105, 112, 109, 107, 111, 112, 112, 111, 110, 110, 105, 114,
106, 112, 111, 106, 108, 107, 107, 108, 109, 102, 110, 101, 108, 104, 106, 108, 102, 112, 100, 110,
101, 105, 106, 101, 110, 98, 109, 101, 104, 101, 109, 101, 107, 104, 102, 106, 101, 106, 106, 103,
106, 104, 103, 105, 106, 104, 106, 103, 104, 100, 109, 99, 107, 104, 106, 104, 105, 103, 105, 103,
104, 102, 107, 101, 104, 105, 100, 106, 101, 106, 102, 105, 102, 101, 103, 103, 103, 104, 101, 99,
104, 99, 111, 97, 108, 99, 102, 98, 104, 98, 102, 103, 104, 99, 103, 98, 102, 102, 103, 101,
102, 99, 102, 102, 100, 103, 101, 103, 102, 100, 100, 101, 96, 102, 98, 96, 102, 91, 105, 95,
100, 99, 97, 94, 102, 89, 104, 89, 101, 93, 97, 98, 93, 95, 95, 92, 97, 92, 91, 96,
92, 94, 92, 93, 95, 93, 94, 91, 95, 92, 95, 97, 89, 97, 92, 94, 92, 93, 94, 92,
95, 92, 94, 91, 97, 83, 97, 86, 94, 92, 91, 94, 90, 91, 94, 85, 98, 84, 94, 90,
89, 93, 87, 95, 85, 93, 87, 87, 90, 86, 90, 85, 85, 87, 87, 84, 92, 80, 86, 83,
82, 92, 78, 88, 83, 86, 79, 85, 77, 84, 79, 80, 83, 77, 80, 81, 81, 79, 82, 81,
79, 83, 79, 80, 83, 75, 84, 76, 79, 79, 74, 76, 74, 77, 68, 81, 66, 77, 72, 71,
72, 72, 71, 72, 72, 72, 74, 72, 75, 71, 74, 73, 71, 71, 71, 69, 73, 68, 71, 69,
71, 67, 67, 71, 71, 70, 72, 66, 72, 66, 72, 66, 70, 70, 68, 68, 67, 67, 65, 73,
63, 72, 68, 66, 71, 65, 67, 66, 65, 64, 67, 59, 66, 60, 67, 61, 61, 65, 56, 68,
59, 69, 58, 68, 61, 65, 63, 60, 64, 61, 62, 60, 63, 61, 61, 60, 59, 61, 62, 55,
60, 56, 60, 58, 56, 63, 53, 63, 56, 57, 58, 59, 55, 54, 57, 58, 56, 56, 54, 58,
50, 58, 52, 57, 50, 52, 55, 50, 54, 50, 49, 54, 50, 56, 52, 46, 54, 47, 47, 53,
44, 48, 48, 42, 46, 47, 45, 47, 43, 45, 44, 45, 43, 42, 44, 38, 44, 40, 38, 42,
33, 42, 32, 40, 31, 36, 30, 38, 30, 34, 29, 33, 29, 34, 28, 27, 31, 27, 35, 21,
40, 23, 37, 26, 33, 34, 28, 37, 32, 33, 34, 28, 32, 30, 33, 33, 32, 33, 32, 37,
32, 35, 31, 39, 30, 35, 35, 32, 32, 33, 32, 35, 35, 38, 36, 36, 33, 35, 37, 31,
38, 36, 36, 39, 31, 41, 36, 43, 34, 39, 36, 39, 35, 37, 33, 38, 30, 38, 29, 36,
34, 33, 39, 32, 39, 35, 32, 42, 32, 42, 29, 43, 29, 41, 31, 41, 28, 42, 30, 40,
34, 37, 36, 34, 40, 31, 40, 36, 35, 38, 37, 40, 39, 37, 39, 41, 36, 43, 41, 42,
40, 42, 41, 39, 39, 42, 40, 45, 39, 43, 46, 38, 48, 38, 49, 42, 46, 46, 41, 44,
44, 45, 47, 45, 43, 43, 46, 45, 42, 44, 42, 50, 44, 44, 41, 55, 41, 51, 38, 48,
43, 46, 45, 48, 49, 43, 49, 43, 44, 46, 49, 45, 53, 47, 51, 53, 51, 53, 45, 48,
52, 45, 52, 47, 51, 46, 54, 49, 50, 53, 45, 53, 46, 49, 50, 53, 48, 52, 48, 50,
52, 50, 53, 44, 45, 50, 46, 52, 45, 53, 47, 53, 51, 49, 53, 49, 48, 48, 46, 48,
49, 49, 48, 52, 48, 52, 46, 51, 44, 52, 40, 49, 40, 48, 41, 47, 37, 46, 42, 39,
45, 39, 40, 41, 38, 40, 41, 40, 36, 43, 38, 40, 42, 39, 40, 35, 37, 32, 34, 39,
30, 36, 30, 34, 35, 33, 36, 35, 35, 31, 33, 33, 28, 31, 31, 27, 29, 22, 31, 23,
28, 21, 25, 26, 18, 25, 19, 21, 20, 16, 19, 18, 17, 18, 15, 12, 15, 13, 10, 13,
9, 9, 13, 7, 7, 14, 8, 14, 3, 12, 11, 7, 6, 7, 0, 6, 7, 4, 5, 10,
1, 7, 1, 3, 4, -5, 6, -1, -3, 7, -9, -1, -5, -4, -6, -4, -7, -3, -12, -3,
-9, -5, -13, -13, -10, -8, -13, -9, -14, -11, -12, -14, -11, -14, -11, -14, -12, -12, -20, -11,
-21, -16, -14, -21, -14, -20, -12, -26, -11, -25, -12, -20, -15, -22, -13, -23, -16, -19, -14, -19,
-17, -18, -22, -17, -25, -17, -19, -20, -19, -20, -19, -16, -18, -18, -19, -20, -23, -18, -19, -24,
-20, -28, -19, -32, -23, -26, -27, -27, -30, -26, -31, -28, -34, -28, -41, -30, -38, -28, -40, -29,
-35, -36, -33, -36, -33, -36, -34, -38, -34, -39, -37, -37, -37, -35, -35, -41, -33, -38, -33, -36,
-36, -34, -38, -36, -33, -36, -37, -39, -34, -40, -34, -46, -44, -42, -50, -41, -48, -45, -42, -48,
-46, -52, -47, -52, -45, -51, -49, -52, -61, -46, -63, -52, -55, -53, -52, -56, -52, -55, -53, -55,
-55, -55, -47, -63, -53, -58, -54, -53, -51, -56, -57, -54, -60, -52, -60, -53, -60, -54, -58, -56,
-63, -57, -61, -56, -61, -60, -61, -61, -61, -62, -60, -65, -63, -67, -59, -72, -61, -74, -64, -76,
-63, -72, -71, -65, -72, -68, -69, -74, -64, -75, -70, -73, -75, -67, -74, -77, -66, -79, -69, -75,
-67, -71, -76, -81, -80, -78, -85, -82, -87, -79, -88, -87, -84, -89, -85, -87, -87, -85, -90, -86,
-93, -86, -90, -89, -94, -94, -95, -96, -97, -98, -98, -100, -101, -93, -101, -92, -101, -96, -101, -98,
-100, -97, -99, -103, -103, -99, -105, -98, -108, -104, -103, -106, -102, -105, -105, -107, -101, -106, -102, -108,
-106, -107, -107, -109, -106, -104, -112, -108, -111, -112, -110, -113, -111, -109, -106, -110, -116, -107, -114, -112,
-114, -113, -116, -112, -117, -113, -117, -113, -118, -114, -120, -112, -122, -115, -116, -120, -121, -120, -124, -118,
-127, -115, -124, -120, -118, -121, -121, -118, -121, -120, -120, -125, -120, -128, -120, -120, -126, -115, -130, -125,
-122, -125, -121, -132, -116, -133, -116, -127, -119, -126, -120, -123, -120, -123, -126, -123, -123, -129, -127, -129,
-127, -126, -132, -123, -130, -122, -126, -123, -129, -129, -131, -125, -127, -126, -131, -127, -130, -132, -124, -127,
-121, -128, -123, -121, -128, -128, -119, -124, -116, -127, -121, -125, -118, -122, -120, -121, -118, -124, -118, -122,
-115, -127, -121, -124, -117, -123, -124, -119, -122, -118, -121, -126, -119, -126, -119, -122, -124, -127, -121, -125,
-117, -128, -117, -132, -122, -129, -124, -125, -124, -124, -125, -121, -122, -119, -127, -118, -122, -119, -117, -123,
-118, -118, -111, -121, -117, -117, -123, -112, -113, -121, -112, -121, -117, -120, -122, -119, -115, -115, -115, -115,
-120, -118, -117, -118, -108, -120, -108, -118, -109, -117, -104, -119, -112, -115, -112, -113, -111, -116, -111, -113,
-109, -106, -112, -109, -115, -107, -111, -108, -106, -116, -107, -109, -110, -110, -105, -115, -108, -116, -106, -112,
-102, -116, -100, -113, -104, -112, -104, -111, -100, -105, -101, -111, -105, -105, -109, -101, -104, -103, -107, -100,
-110, -107, -109, -111, -109, -113, -105, -111, -106, -109, -108, -109, -102, -109, -107, -102, -107, -103, -106, -98,
-107, -99, -106, -102, -109, -95, -106, -94, -108, -96, -111, -98, -99, -106, -93, -108, -94, -103, -96, -96,
-98, -99, -96, -98, -91, -99, -97, -91, -100, -92, -99, -94, -96, -96, -91, -99, -92, -95, -95, -91,
-94, -87, -92, -94, -93, -95, -89, -95, -95, -93, -95, -90, -97, -87, -98, -93, -92, -96, -94, -92,
-102, -94, -96, -100, -94, -100, -99, -90, -96, -89, -93, -86, -89, -88, -93, -85, -91, -87, -91, -84,
-88, -81, -94, -87, -87, -93, -76, -82, -79, -84, -77, -80, -82, -85, -75, -85, -81, -77, -78, -78,
-85, -75, -76, -85, -76, -84, -75, -81, -80, -84, -79, -86, -74, -87, -71, -86, -79, -78, -83, -77,
-81, -79, -89, -81, -85, -84, -91, -81, -89, -82, -87, -84, -81, -83, -79, -86, -83, -84, -82, -82,
-85, -87, -81, -84, -80, -84, -77, -85, -78, -83, -78, -77, -82, -74, -88, -77, -85, -88, -84, -84,
-91, -82, -89, -84, -87, -88, -88, -88, -91, -91, -90, -97, -90, -100, -92, -96, -98, -98, -96, -99,
-102, -96, -103, -102, -101, -100, -105, -101, -104, -101, -103, -101, -103, -105, -106, -107, -112, -111, -110, -112,
-112, -109, -115, -111, -116, -114, -117, -114, -120, -120, -119, -120, -114, -119, -113, -123, -120, -126, -122, -126,
-121, -125, -121, -133, -129, -134, -138, -131, -142, -132, -139, -143, -145, -146, -147, -145, -140, -148, -141, -150,
-141, -151, -148, -144, -155, -154, -155, -154, -158, -161, -161, -162, -163, -168, -166, -164, -173, -165, -171, -165,
-167, -166, -165, -169, -164, -170, -174, -170, -181, -164, -183, -171, -182, -175, -177, -172, -173, -173, -171, -181,
-170, -184, -172, -184, -179, -176, -184, -178, -182, -181, -181, -183, -184, -185, -188, -189, -185, -193, -183, -188,
-187, -188, -191, -188, -189, -189, -189, -190, -195, -191, -198, -193, -199, -190, -198, -192, -195, -190, -195, -197,
-201, -193, -198, -199, -195, -199, -198, -196, -201, -193, -200, -200, -202, -198, -199, -203, -196, -204, -198, -199,
-200, -196, -203, -202, -205, -200, -199, -200, -202, -198, -198, -200, -203, -196, -206, -198, -204, -198, -212, -200,
-209, -194, -208, -203, -206, -210, -203, -206, -201, -205, -202, -200, -207, -203, -207, -205, -206, -205, -206, -205,
-210, -208, -206, -205, -212, -208, -211, -207, -218, -213, -214, -217, -208, -224, -212, -222, -215, -217, -215, -211,
-219, -223, -222, -221, -224, -224, -222, -225, -222, -224, -226, -225, -228, -233, -233, -226, -228, -234, -231, -228,
-234, -230, -232, -231, -237, -232, -231, -230, -233, -233, -231, -228, -234, -222, -237, -224, -238, -232, -235, -234,
-241, -231, -243, -230, -246, -233, -236, -239, -230, -240, -236, -236, -239, -235, -235, -241, -234, -235, -234, -233,
-232, -240, -231, -237, -231, -231, -233, -230, -227, -230, -230, -230, -229, -225, -232, -224, -231, -230, -220, -234,
-222, -232, -219, -227, -225, -227, -221, -226, -220, -222, -220, -216, -223, -215, -219, -214, -218, -215, -219, -214,
-212, -218, -213, -212, -219, -210, -219, -209, -211, -213, -211, -210, -213, -213, -208, -217, -199, -212, -197, -204,
-202, -200, -197, -202, -199, -200, -194, -194, -197, -191, -194, -187, -198, -183, -191, -183, -189, -184, -178, -181,
-175, -185, -175, -173, -179, -169, -174, -167, -173, -172, -176, -167, -170, -168, -169, -166, -167, -170, -157, -165,
-155, -164, -158, -157, -159, -153, -155, -149, -156, -153, -152, -154, -153, -154, -150, -144, -145, -144, -143, -142,
-140, -139, -133, -131, -132, -127, -123, -126, -121, -126, -119, -121, -116, -110, -115, -106, -110, -105, -105, -111,
-103, -103, -92, -100, -104, -107, -109, -100, -110, -95, -74, -93, -116, -132, -132, -146, -194, -259, -213, -93,
66, 172, 126, -21, -19, -207, -84, 130, 25, -99, -156, -204, -435, -299, 231, 502, 271, -216, -480, -230,
399, 238, -58, -314, -535, -433, -553, -193, 358, 794, 213, -4, -465, -562, -283, 502, 524, 152, -359, -603,
-369, -460, 140, 674, 771, 175, -426, -905, -859, 202, 777, 160, 158, 281, 163, 9, -230, -75, 285, 458,
-602, -457, 101, -267, -338, -190, 3, 574, 612, -104, -559, -348, -191, -13, 436, 612, 255, -682, -950, -208,
32, 500, 643, 260, -84, -624, -900, -137, 829, 184, -202, -188, -515, -867, -336, 740, 968, 864, 103, -732,
-308, 715, 673, 627, 667, -343, -1284, -1408, -360, 1581, 1905, 230, -349, -682, -698, -787, -461, 132, 691, 267,
-712, -883, -215, 330, 231, 287, 761, 993, 456, -177, -91, 360, 723, 169, -272, -363, -970, -852, -314, 588,
955, 932, 878, -393, -764, -380, 933, 2088, 1854, 317, -1139, -1561, -2526, -1043, 3824, 5159, 946, -3930, -3775, -1169,
493, 262, -2778, -835, 2161, 573, -2169, 152, 5076, 4916, 1325, -2638, -2906, -745, 1427, 1480, 271, 3505, 1851, -2634,
-7112, -4286, 2118, 5059, 1408, -6554, -6551, 874, 3974, 572, 915, 2497, -7769, 451, 7697, -3773, 1296, 7107, -3494, -11587,
-3190, 4190, 3835, 7153, 11555, 4211, 2427, -668, -13703, -14813, -5045, -6062, -2502, 8830, 10351, 826, 1174, 9168, 9414, 2953,
5582, 2245, -7762, -5607, 1085, -2479, 9366, 9842, -3838, -13179, -14405, -20281, -16538, 1533, 13853, 12966, 8519, 1344, -15946, -20074,
1408, 12996, 21024, 25143, 17537, -2940, -23197, -15995, -8760, -1160, -875, 3174, -2083, -8944, -12691, -11860, 5697, 12057, 6704, 1348,
1389, -2708, 1574, 7343, 7683, 8388, -1595, -14128, -11587, -635, 5754, 6886, 7914, 1513, -5697, -8951, 2395, 6585, -1963, -6035,
-6727, -7745, -1371, 12868, 17685, 8900, -3267, -8725, -12203, -6875, 3580, 7107, 1651, -4740, -3178, 7619, 9793, 3498, 4809, 3408,
128, 868, 2047, 1385, 176, -3370, -4858, -2635, -2128, -1953, -3973, -3511, -5120, -5033, -217, 7888, 7424, 493, -4010, -689,
4064, 4729, 3175, -703, -1805, -390, 2782, 2042, -2501, -9060, -10544, -5634, -1454, 2104, 5516, 3659, 1271, 620, 4733, 4757,
-259, -246, 2697, 758, 430, 3780, 5029, 4712, 1763, -3742, -2560, -363, -493, -220, -1433, -4190, -6146, -2029, 2718, 878,
-2772, -4112, -5977, -1887, 4007, 6378, 3759, 1749, -468, -1509, 1877, 5289, 784, -926, -2492, -5255, -4931, -130, -258, -585,
-1235, 130, -517, 1635, 6358, 4420, 1495, 77, 419, -1100, 2656, 4011, 1135, -2459, -4175, -3725, -1646, -698, 1064, 1184,
-1405, -2251, 451, 2270, 2793, 2609, 1799, 2695, 2937, 2555, 2381, 2481, 900, -4028, -7232, -4581, -3333, 24, 1212, -792,
-1414, -309, 3835, 5061, 2573, -460, -4195, -4530, -1227, 4567, 7490, 6141, 2203, -1113, -2241, -3806, -2447, -1954, -775, 1392,
-262, -4117, -5375, -2706, 534, 1235, 1258, 2216, 2934, 2347, 3899, 4884, 2008, -2464, -3795, 1371, 522, -186, 1317, -2032,
-887, -5504, -8868, -402, 638, 1007, 3309, -2981, -2950, 748, 3057, 4384, 2781, 2790, 1013, -1675, -2185, -208, 1543, 2737,
-884, -5060, -4403, -1241, 3058, 5820, 4244, 1180, -3199, -1063, 3491, 3094, -632, -1664, -2723, -2758, -1094, 434, 147, -3089,
-4618, -2829, 2377, 3511, 3443, 3585, 1904, -676, -3470, -4374, -1548, 1224, 195, -592, -38, -443, -310, -1062, -1013, 317,
186, 241, 1973, 2069, -348, 444, 3272, 6247, 5138, 445, -2815, -2056, -1257, -710, -908, -1418, -2201, -2248, -1259, 262,
1846, 2275, -232, -637, 1128, 1649, 787, -397, -1036, -726, -1496, -1493, -77, -646, -2185, -1872, 188, 675, 1323, 1594,
1137, -683, -1694, -1962, -501, 2079, 2666, -367, -1419, -546, -564, 280, 1864, 1998, -690, -1992, -1289, 327, 2454, 2767,
1825, -471, -2398, -1816, -21, 1880, 2913, 1746, 1573, 1296, -1242, -2850, -1613, -274, -1517, -3238, -3378, -1109, 303, 304,
87, 1074, 2198, 1713, 403, 217, 10, -434, -62, 219, -32, -759, -1, -681, -1464, -628, -1111, -1382, -1490, -1042,
-489, -605, -555, -573, 695, 1933, 1619, 2525, 3905, 3790, 1718, 1998, 1724, -159, -2276, -3563, -1781, 312, -263, -1169,
-475, -522, -1446, -1945, -1635, -1441, -1810, -1780, -1443, 95, 1088, 1485, 3522, 4139, 1083, -1396, -1044, 137, 203, -616,
-1150, -624, -96, -374, -740, 272, 1556, 430, -1711, -2133, -512, -766, -1354, -907, 552, 1930, 3159, 2305, 768, 1056,
1472, 1463, 1725, 1860, 754, -1257, -3363, -3491, -2481, -341, 727, -267, -367, -349, -132, 1090, 958, -91, -231, -1472,
-2622, -2064, -618, 1277, 1320, 276, -958, -1486, -465, 111, 1090, 1507, 489, 354, 1071, 115, -886, -11, 612, 1005,
691, -718, -1165, -339, 92, -1468, -2198, -2042, -2376, -1888, 606, 2560, 2950, 2492, 1168, 90, -35, -1, -237, -277,
-931, -1671, -1406, -751, 341, 543, -465, -362, 104, 532, 744, 491, 170, -364, -1168, -1473, -273, 1218, 1514, 757,
-88, -335, 62, 699, 1121, 250, -869, -1108, -1262, 222, 1567, 1209, -481, -1363, -350, 308, 115, -588, -1525, -1082,
-162, 204, 1070, 1523, 1163, 421, -650, -1305, -259, 1662, 2688, 1407, -448, -1387, -1512, -944, -209, 879, 983, -1178,
-3269, -2867, -853, 1147, 1749, 755, -399, -1186, -486, 823, 1719, 2260, 2075, 919, 174, 238, 604, 831, 231, -726,
-1036, -1207, -1422, -1819, -1678, -1323, -986, 148, 867, 568, 317, 636, 1178, 969, 542, 952, 1047, 156, -773, -303,
487, -6, -1410, -1893, -2071, -1693, -560, 115, 52, 440, 411, -184, 95, 1390, 1765, 1299, 564, 204, 36, -86,
-333, -490, -181, -173, -718, -1181, -504, 673, 806, -211, -311, 161, 463, 389, 272, 1062, 1286, 60, -264, 348,
17, -605, -545, -394, -254, -23, 259, 962, 1126, -240, -1554, -1050, 631, 1389, 1043, 253, -382, -927, -1051, -805,
-76, 335, 288, 725, 906, -145, -81, 387, 586, -25, -4, 10, 628, 549, 596, 426, 78, -624, -476, -606,
129, -172, -666, -2387, 2277, 5238, -992, -9659, -4038, 5383, -867, 4819, 7014, -3558, -4139, 4486, 10242, 2143, -5474, -14811,
-10415, 4884, 5349, 688, 6993, 10920, -3083, -11174, -11844, 711, 9061, -447, -860, 208, -4365, 1782, 10647, 7091, 3825, 8516,
1556, -2755, -5068, -3336, -4381, -1862, 1733, -2876, -5872, -4947, -2204, 680, 4123, 1176, -1975, -4801, -3363, 6882, 346, 566,
2488, 942, 4118, 1627, 333, 4436, 4391, 1193, 1351, 796, -2612, -6573, -6586, -3653, -2552, 1002, 814, -1012, 1243, -195,
977, 3521, 3468, 1489, -305, -649, -55, 1125, 4879, 3985, -134, -2621, -913, -1411, -648, 945, 1012, -1288, -2640, -297,
1968, 2653, 1224, -64, 637, 1206, -513, -36, 1399, -931, -2851, -2765, 401, 1219, -494, -80, 428, 29, -74, -870,
-1476, 41, 1510, 1624, 542, -523, -743, 1262, 1491, 530, 2089, 1300, -514, -1768, -1630, -2887, -449, 224, 1696, 3543,
300, -450, -1037, 2131, 1597, 193, -3975, -3895, 2320, 2958, -239, -2406, 1651, 4881, 4560, -3997, -2158, 649, -1208, -696,
201, -182, -109, 440, -2342, -42, 3325, 1656, -448, -183, -1955, -373, 1987, 826, 1694, 2718, 1076, -1112, 426, 3513,
-266, -2287, -2540, -803, 1694, 85, -780, -17, 890, -174, -760, 198, 2600, 3538, 1337, 1036, 1701, 1638, 1621, -1258,
-2497, -2155, -2645, -167, 1962, 2087, 1773, -412, -980, -806, -92, 1779, 2450, 607, -1896, -954, 390, 972, 2120, 1349,
386, -991, -514, 12, 765, 652, -945, -1836, -857, 203, 172, 1724, 1760, 577, 307, 1584, 1743, 1255, 418, -394,
-789, -1236, -789, 25, 1139, 1210, -195, -925, 160, 599, 550, 693, 331, 1, -866, -3373, -611, 3517, 1607, 2082,
2252, -1731, -2530, 1331, 3923, 3357, 234, -3772, -2420, 1137, 2280, 1246, 893, 2485, 2172, -3306, -4205, -351, 2336, 2693,
262, -928, 1526, 3281, 1135, -462, 68, 1816, 2682, 1528, -283, -282, -781, -2558, -735, 312, -921, -808, -106, -144,
-319, 103, -486, -1786, -687, 2459, 2089, 1157, 1089, 1718, 1183, -397, -450, 1419, 2623, 1463, -551, -1319, -1020, -214,
178, -548, 238, 1024, -1427, -2083, 1222, 2113, 1238, 2215, 1075, -269, 1076, 1411, 1502, 1160, 923, 396, -1093, -1560,
-721, -15, 555, 381, 88, 213, -361, -26, -216, 182, 1567, 1287, 816, 959, 648, 532, 1463, 2147, 2037, 1085,
213, -1331, -1174, 14, 538, 1051, 388, -630, -415, -406, -63, 1060, 1652, 1495, 462, 209, 667, 613, 1128, 1574,
1402, 1521, 1130, 137, -1461, -810, 898, 449, 704, 927, 881, 695, -554, -468, 718, 1386, 798, 1104, -130, -3600,
-6722, -8295, -6850, -5921, -7270, -8910, -7376, -5289, -3501, 350, 4797, 6206, 4034, 2232, 3614, 6596, 7581, 8466, 9550, 10329,
9954, 10689, 11213, 5255, -403, -2173, -2312, 153, 3828, -400, -6221, -10389, -13159, -11907, -9240, -6718, -5475, -5309, -5440, -2535,
3772, 9698, 13893, 11015, 5629, 2695, 4058, 8124, 10010, 5147, 1299, -579, -1279, 2958, 3242, -927, -3582, -3744, -6148, -6342,
-4740, -3257, -772, -4030, -6706, -3742, 3143, 8454, 7278, 740, -5364, -4407, 1258, 5151, 6826, 7303, 1784, -3574, -1122, 1959,
3042, 5479, 5434, -1282, -7833, -7937, -1877, -506, -3464, -4465, -972, -626, -2823, 2472, 6249, 3940, -714, -2405, 237, 2956,
4372, 5515, 4702, -1476, -2218, 3644, 6968, 3565, -5999, -11376, -4964, 5040, 10538, 7080, -2959, -8200, -6897, -6205, -2240, 258,
-3454, -6515, -5773, 2295, 11100, 12141, 4878, -2781, -3101, 543, 7029, 9102, 3458, -2655, -6484, -4579, 1315, 3599, 3821, 813,
-6110, -8250, -3948, 453, 2398, 1845, -2685, -6885, -3271, 4141, 6681, 2663, -1132, -708, 3608, 6425, 3066, -1346, -4115, -2602,
791, 4237, 4598, 3228, 655, -1608, 760, 3722, 2792, -633, -5195, -7665, -4876, -1807, 1046, 3111, 1827, -804, -3353, -1452,
3338, 5051, 4345, 2950, 1340, -683, -1829, -500, 207, -762, -2774, -4049, -3164, -1670, 860, 2310, 2358, 2305, 1604, -782,
-89, 1795, 1793, -270, -3603, -4373, -2493, -43, 3195, 5070, 1854, -2902, -3410, -1050, 123, 1636, 1072, -2936, -3116, -809,
62, 1049, 939, 1323, 3267, 2613, 1491, 2303, 2205, 559, -1598, -2477, -1048, -1511, -1848, -1255, -1449, -564, 1322, 2493,
1846, -792, -3542, -3206, -862, 1948, 2075, -204, -2548, -2387, 324, 3258, 2697, 48, -764, -973, -1595, 609, 2131, 1837,
684, -1706, -2591, -642, 1410, 3411, 5166, 4186, 702, -1201, -1496, -829, 1478, 3754, 2585, -769, -1890, -1949, -295, 1027,
96, -125, 508, -931, -2504, -1493, -349, 772, 797, -390, -435, 205, 352, 290, -795, -2012, -1157, 590, 2117, 2587,
2182, 1080, 351, -59, 1003, 2083, 1403, -386, -1698, -1518, -582, 340, 954, 646, -858, -1796, -1647, -155, 845, 925,
946, 1131, 361, 116, 662, 340, -618, -981, -1553, -1646, -931, 606, 1383, 611, 514, 552, 811, 673, -30, -1038,
-765, 305, 15, 128, 189, 592, 998, 1532, 1574, 65, -1091, -2309, -1694, -990, -874, -611, -852, -228, 531, 1405,
1225, 1428, 1913, 1651, 1168, 260, -277, -1475, -2135, -1682, 819, 1759, 1460, 2127, 2269, 1725, 1830, 1865, 671, -1034,
-2215, -2039, -742, 765, 1025, -234, -1065, -840, -318, 339, 675, -385, -752, -840, -1080, 602, 1175, 142, -735, -854,
284, 2367, 2503, 1782, 1613, 393, -97, -249, 28, 331, 251, -378, -736, -199, -15, -777, -856, -641, -874, -570,
-263, 211, 667, -63, -1047, -642, 641, 1423, 1638, 1181, 628, 1377, 1781, 1332, 733, 63, -324, -717, -815, -849,
-1225, -1126, -1008, -1194, -783, 360, 1250, 1173, 905, 120, -588, -673, -977, -180, 692, 338, 116, -167, 54, 464,
527, 776, 506, -143, -125, 889, 1363, 974, -549, -1519, -1081, -878, -101, 1121, 1053, 1112, 816, -811, -965, 445,
1203, 531, 35, -736, -861, -283, 59, 346, -119, -724, -463, -276, -835, -468, 569, 1059, 20, -276, 824, 1452,
1440, 1149, 1327, 1460, 1371, 516, -806, -982, -693, -208, -290, -1194, -922, 26, 185, -203, -57, 373, -385, -923,
-456, 505, 1122, 354, 102, 706, 1047, 1197, 1044, 847, 61, -596, -683, -442, -376, -433, -893, -1054, -254, 335,
-160, 114, 871, 719, 136, -238, 13, 606, 383, -246, 26, 510, 569, 355, 96, -212, -832, -776, -346, -334,
-737, -616, 85, 372, 140, 466, 1345, 1335, 564, 165, 338, 431, 140, -108, 65, -103, -579, -774, -335, 150,
-19, -208, -187, -52, -107, -15, 84, -278, -484, -495, 99, 909, 627, 45, -306, -882, -1065, -689, 457, 1207,
728, -52, -382, 221, 797, 404, -32, -52, 195, 223, 411, 442, 448, 335, -34, -597, -693, -541, -339, -235,
-95, -202, -419, 5, 413, -41, -150, 486, 1016, 1062, 500, 26, 332, 395, -159, -496, -359, -285, -510, -661,
-549, 259, 299, -393, -1000, -1176, -531, 684, 1103, 769, 405, 214, 449, 543, 260, 189, 190, -233, -99, 349,
766, 270, -209, -364, -89, -31, -192, -105, -168, -378, -247, 336, 401, -446, -580, -57, 420, 566, 515, 349,
202, 29, -507, -744, 271, 1280, 684, -446, -957, -634, -91, 559, 538, -314, -741, -625, -354, -44, 259, 351,
-386, -868, -512, 165, 753, 723, 167, -554, -925, -414, 631, 774, -405, -907, -560, -643, -291, 290, 261, -257,
-544, -846, -611, 126, 49, -525, -748, -411, 418, 760, 102, -313, 60, 139, 337, 435, -397, -722, -251, 628,
1643, 1623, 477, -748, -985, -928, -909, 10, 869, 1452, 1012, -655, -846, 230, 413, -226, 87, 971, 422, -1085,
-1479, -246, 739, 871, 554, -186, -504, -94, -65, -248, 19, 569, 329, 203, -87, -101, 510, -42, -127, 251,
-151, -606, -125, -59, -592, -435, -373, -431, 1, -47, -695, -604, 49, 27, -332, 316, 1281, 330, -739, -913,
-955, -52, -27, -294, 81, 475, 6, -369, 188, -79, 177, -191, -730, 60, 872, 683, -268, -85, 181, 119,
-275, -504, -90, 300, 532, 156, -121, 449, 576, 453, -923, -1796, -1040, 203, 1030, 849, -45, -430, -827, -222,
335, 283, 175, -494, -1313, -839, -440, -710, -282, 57, -962, -1944, -1004, 416, 1629, 1524, 598, -130, -173, -149,
-590, 412, 1986, 1288, 45, -915, -623, 921, 1313, 422, 557, 41, -519, -1409, -1163, -913, 144, 439, -590, -1730,
-1298, -309, 185, 926, 1089, 607, 152, -391, -660, -179, 798, 879, -112, -977, -1191, -815, -418, 129, -134, -148,
-694, -1175, -741, -210, 106, 377, 946, 1339, 703, 34, -396, -648, -508, -1275, -969, 363, 622, -59, -879, -693,
228, 369, -674, -845, 257, 584, 1057, 1301, 753, 175, -280, -1376, -1552, -821, -102, 242, -252, -711, -470, -351,
-977, -602, 166, 572, 570, 4, -597, -211, 495, 404, 409, 571, 480, 19, -134, 112, -181, -467, -624, -513,
-148, -233, -442, -654, -495, -127, -3, -285, -526, -415, -3, 95, 187, 706, 463, -391, -664, 121, 414, 71,
-102, -292, -849, -802, -611, -502, -651, -431, -195, -534, -549, -180, 407, 467, 420, 765, 812, 639, 342, 273,
526, 1051, 1114, 205, -2925, -2297, 1547, -696, -3487, -2141, -1871, 3401, 3077, -27, 2988, 2309, -3603, -3416, -2328, -2675,
-1218, 3708, 3278, 4250, 3878, 1115, -2615, -4671, -3117, -1227, -1391, -3257, -1324, -523, -854, -503, 891, 1192, 20, 1017,
1675, 520, -257, -3184, -1668, 3154, 3067, 3132, 1192, -2134, 309, 860, -889, -1301, 1519, 1156, -2528, -4381, -888, 1447,
-177, -1502, -2719, -296, 228, -1598, 1427, 3598, 4804, 2979, 874, 148, -2785, -1612, -886, -786, 1852, 2008, -1647, -2564,
-3589, -5491, -2366, 1584, 2316, 2443, 1517, -979, -3992, -3509, 1275, 3553, 1381, -2321, -3526, -634, 1319, 1897, 2952, 1302,
-211, -456, -1015, -781, 488, 147, 866, 2201, 1438, 1247, -481, -484, 1365, 2288, -812, -4616, -5654, -2973, -2402, -1730,
1629, 3278, 1901, 985, 1311, 144, 418, 1040, 676, -576, -1570, -1980, -1476, 666, 843, 217, -125, -1827, -420, 382,
234, 734, 1047, -2187, -3869, -3353, -1458, -258, 364, 2408, 2968, 1516, 742, 1240, 2133, 1771, 1043, 2304, 1417, -1936,
-2418, -599, -1758, -3712, -2465, -356, -538, -1531, -1664, 646, 2203, 230, -1485, 1270, 1379, -521, 125, 1204, 1312, 1111,
-509, 605, 923, -1588, -2216, -1310, -949, -1350, -1991, -2490, -1294, -664, -15, 785, 1684, 1819, 2001, 986, 59, -459,
-180, -260, -1161, -563, 121, 47, 1282, 2339, 1410, 17, 133, -295, -707, -937, -1113, 97, 742, -249, -786, 55,
-109, -613, 808, 302, -447, -606, -584, -242, -71, -354, 798, 1498, -749, -1725, -639, 210, -353, 60, 1914, 1833,
-725, -2193, -878, 455, 498, -212, -30, -309, -1725, -1500, -147, 861, 720, 736, 447, -721, -1412, -727, 234, 461,
303, -374, -779, -351, 104, 706, 706, 274, -848, -808, 236, 667, 143, 508, 816, 434, 286, -668, -904, -40,
-104, -580, -474, -651, -670, -146, 393, 567, 815, 663, -138, -596, -35, 401, -117, -368, -302, -446, -559, -354,
41, 204, 754, 187, -242, 261, -36, -887, -766, -160, -100, -313, -363, -756, -605, -103, 352, 270, -162, -794,
-1152, -890, -542, -253, 320, 485, 499, 376, 204, 213, 135, 610, 1170, 1298, 888, -77, -279, 72, 195, 418,
719, 602, 163, -463, -937, -1049, -824, -218, 150, -135, -621, -484, -271, -404, -300, -196, -204, -376, -364, 173,
557, 603, 461, 167, -36, -557, -875, -954, -1101, -1018, -727, -703, -714, -387, -225, -334, -430, -326, 77, 571,
590, 356, 402, 304, 181, 461, 580, 293, -205, -178, 197, 190, 83, 245, 328, 461, 452, 343, 513, 284,
9, 140, 257, 149, -70, -266, -527, -710, -729, -503, -417, -554, -468, -402, -341, -99, -123, -304, -419, -481,
-491, -266, -21, 41, 158, 345, 158, -213, -110, -129, -422, -199, -310, -430, -268, -264, -52, 174, -117, -354,
-155, 132, 109, 266, 430, 70, -116, 107, 201, 366, 617, 172, -90, 21, 151, 384, 353, 22, -167, -164,
-316, -616, -508, -204, -122, -150, -214, -103, 118, 56, -291, -357, -15, 75, 120, -63, -535, -740, -638, -459,
-171, 402, 229, -546, -919, -1196, -1130, -343, 397, 488, 231, 149, 111, -51, -19, -88, -170, 66, 99, -42,
-19, 45, -47, -371, -749, -801, -312, 114, 448, 502, 86, -433, -521, -285, 155, 169, 435, 666, -3, -324,
-131, 302, 557, 770, 446, -317, -640, 187, 456, 257, 153, -663, -1581, -1591, -372, 457, 3, -463, -791, -740,
-765, 206, 390, 389, 526, 73, -338, -1021, -935, -516, 190, 275, 63, -292, -98, 114, 27, 653, 190, -106,
-366, -1382, -1055, -336, 90, 195, 651, 731, -6, -419, -631, -603, -4, 285, 359, 532, 382, -369, -717, 98,
456, 165, 237, 286, -152, -691, -557, 57, 469, 92, -297, -178, -246, -362, -732, -991, -953, -465, -429, -599,
-243, -156, -236, 308, 396, -148, -319, -462, -304, 279, 419, -252, -316, -58, -46, -64, -32, -44, -10, -63,
-495, -459, 13, 16, 86, 232, 48, -207, -219, -78, 132, 279, 212, 272, -51, -390, -562, -444, -429, -171,
7, -213, -447, -332, -320, -282, -15, 163, 93, -122, -322, -126, 187, 155, -186, -426, -177, -85, -339, -163,
68, -122, -465, -418, -223, -89, 95, 307, 18, -335, -232, -308, -304, 88, 200, 4, -229, -126, -110, -128,
-80, -146, 107, 94, -348, -168, 433, 150, -535, -509, -163, -175, -460, 11, 324, 43, -140, -289, -39, 163,
-164, -393, -170, 177, 17, -104, -121, -278, -823, -768, -234, -114, -55, -25, 141, -207, -223, 165, 249, 83,
-54, 13, -167, -477, -423, -81, 50, -14, -100, -185, -336, -468, -44, 265, 408, 567, -90, -752, -637, -210,
36, 228, 50, -387, -621, -632, -292, -11, 51, 199, 409, 246, 74, -102, 29, 103, 25, -335, -767, -747,
-364, -159, -245, 24, 66, -337, -527, -262, -50, -27, 45, -131, -313, -304, -363, 151, 395, 376, 525, 719,
-25, -380, -251, 111, 88, -1, 238, -144, -718, -474, -74, -163, -201, 266, 726, 226, -656, -962, -561, -207,
-35, 142, -46, -586, -1286, -460, 163, 373, 587, 536, 312, -272, -969, -181, 138, 88, -469, -921, -455, -290,
1, -238, -96, -442, -965, -578, -102, -50, 588, 900, -194, -953, -270, -92, 499, 1030, 317, -532, -858, -756,
-532, -323, 5, -57, -367, -722, -543, 378, 943, 433, 87, 293, -309, -353, 361, 775, 624, 60, -720, -652,
-461, -189, -494, -755, -868, -665, -327, 449, 590, -70, -740, 113, 458, 20, 145, 803, 34, -144, 9, 957,
-332, -1751, -287, 866, 881, -247, -496, -398, -1049, -1222, -545, 131, 1566, 2325, -1372, -2626, 186, 1725, 1119, 1378,
-514, -2183, -2107, -995, 1470, 1674, 898, 110, -626, -1436, -1184, -673, 307, 1984, 1195, -1424, -2018, -867, 1545, 727,
-649, -182, -226, -30, -174, -218, 187, 388, -380, -1059, -629, 253, -512, -613, -495, -513, -889, 630, 920, 350,
0, -312, 103, 749, 1024, 442, -132, -330, -1556, -1188, -67, -30, -310, 289, -106, -716, -58, 314, 348, 539,
-60, -1183, -704, 431, 987, 1137, 617, 32, -426, -788, -911, -564, 387, 332, -514, -554, 7, 34, 731, 709,
373, -326, -770, -699, -743, -820, -57, 894, 710, 82, -153, -416, -430, -741, -158, 306, 36, -120, 157, 2,
-488, -66, 652, 485, -31, -227, -47, -297, -690, -565, 87, 715, 448, -112, 18, -194, -397, -277, -515, -111,
509, 306, -395, -353, -114, 159, 595, 1077, 17, -865, -160, -65, 121, 381, 506, -31, -912, -764, -599, -367,
341, 872, 622, -333, -888, -960, -955, -468, 210, 638, 361, -329, 58, 405, 378, 432, 239, 97, -131, -177,
-78, 118, 427, 298, -135, -416, -821, -1077, -1274, -470, 578, 996, 1093, 26, -581, -427, -218, 720, 1065, 709,
243, -50, -719, -716, 180, 448, 20, -520, -901, -883, -470, -152, -35, -64, -133, -548, -379, 49, 248, 668,
593, 53, -112, -119, -377, 41, 542, 429, 36, -403, -752, -1067, -1188, -1287, -636, 527, 1249, 1276, 42, -1320,
-1232, 768, 2162, 1532, 1327, 501, -1279, -2586, -965, 1770, 2053, 474, -1146, -2670, -1308, -451, -962, 45, -166, -492,
-550, 268, 836, 1077, 2743, 2241, 256, 1829, -132, -1040, -3527, -2428, 851, 593, 1851, 1026, -592, -3213, -3594, -1035,
2362, 1770, 2453, 2856, -272, -2529, -1229, -35, 465, 2261, 503, 890, -770, -322, 1583, 926, 32, -1671, -996, -2259,
-916, -130, 21, -54, 775, 1978, -368, -310, -85, -1067, 963, 1526, 1629, 3107, 2078, 892, -676, -1309, -2377, -2912,
-1329, -1266, -566, -1457, -509, 215, -595, 176, -75, 1963, 856, -266, 1005, 550, 663, -429, 1817, 2632, -1356, -3576,
-1931, -570, -457, -295, 124, 284, -1818, -1408, -1355, 2597, 7214, -1017, -4809, 1346, 4867, 1126, -278, -104, 1244, -1403,
-2241, 2336, 2696, -5093, -5715, -8789, -6329, -1010, -3064, 7215, 9452, 2370, -1251, -10573, -4134, 5418, 6681, 3815, 3263, 4457,
403, -2260, -415, 1398, 3821, 2932, 5610, 6755, 4760, 2400, 4189, 637, -10238, -7489, -8894, -8913, -1172, 1408, -50, 5217,
4432, 3975, 1809, -7529, -2107, 647, 2730, 3488, 348, 9329, 2626, -3991, 4141, 7264, 7684, 2802, -16370, -14425, 1179, -3663,
-4950, 5946, 913, -3752, -6679, 1598, 2703, 516, 1408, -7419, -1809, 1902, 8671, 2774, -8274, -1847, 13027, 13201, -1658, 10849,
14988, -1770, -24256, -14568, 11933, 11778, -11984, -25643, -6605, -1012, 4611, 9851, 12391, 2730, 864, -1597, -586, 1745, -521, 3023,
4641, -3345, -7996, -6510, 487, -2487, 2935, 1953, 372, 3904, -420, 2010, -1301, -6662, -981, 7570, 6659, 252, -7337, -7366,
9174, 17621, 4608, -2366, -1229, -673, -1368, -6568, -13547, -1288, 4956, -1176, -7110, -4472, -800, 4661, 3931, -3425, 4157, 9087,
4681, 4974, -49, -6265, -1031, 5671, 4067, -1150, -6059, -12622, -623, 5089, -5596, -814, 6892, 3394, -6724, -7066, -3971, 2261,
7347, 5939, -186, -2486, -1416, -1992, -1225, -892, 115, 2943, 1150, -4566, -8504, -3308, 5915, 8586, 8574, 9001, 7631, 1893,
-4965, -6984, -6681, -11236, -10035, -1656, 4621, 4687, 8070, 7077, -35, -12557, -5085, 4481, 2229, -4226, -1863, 2782, -1201, 5030,
-6143, -7893, 11313, 4769, -2565, 8980, 6574, -10919, -5869, 4189, -3389, -212, 6472, 696, -10161, 5190, 2315, -2188, -1109, -2477,
-6820, -2135, 1843, 578, 1597, 5640, 7622, 8736, 14700, 7974, -12245, 2036, 5311, -11892, -29126, 4263, 7261, -28787, -4488, 2214,
14150, 29205, 15012, -22843, -23705, -16365, -19211, -4837, 12660, 20291, 19476, 3827, -2403, 1639, 2489, -24418, -5474, 9671, 2256, -7469,
-5452, 12566, 4211, -3512, -4629, 5526, 3380, -6358, -5436, 7583, 10322, 3960, -7570, 553, -11071, -17362, -877, 12034, 13815, -223,
-4412, -816, 13215, 4805, -14821, -8420, 4923, 7727, -9711, -7412, 3562, 4989, 900, -9801, -12138, 6954, 10212, 4035, 555, -5351,
736, 5308, 7746, -3457, -3435, 5642, -2202, -10909, -4104, 4163, 7270, 1113, -919, 926, -570, -2584, -4961, -1735, 889, 6427,
9867, 7475, -430, -7963, -4726, -1565, 2234, -1118, -7342, -7407, -1932, 7187, 6909, 2686, 13816, 14901, -5474, -5130, 2199, -842,
-11287, -15795, -2389, 5092, -940, -7509, 3173, 11214, 7709, 3604, -3798, -2086, -1165, -2488, -3347, 2396, 4746, -2897, 5130, 10315,
-1707, 3416, 13101, 6188, 450, -9348, -18781, -4057, 1202, -15360, -9813, 3913, 2020, -1359, -662, 4364, 6421, 4942, 2143, 3171,
4286, -126, -1477, -6087, 1919, 1734, -4122, 7194, 14306, 3268, -5825, -6174, -6447, -381, -347, -7425, -10988, -3775, -2782, -345,
6323, 4726, 3486, 3874, 3380, 884, 1234, 3925, -5582, -6781, -2802, -1234, 3370, 3931, 6578, 7425, 1369, -6377, -2784, 1695,
3101, 4335, -2309, -2320, -10504, 2043, 20990, -2365, 10379, -4217, -29207, -3868, 21962, 7318, 5526, 4362, -3339, 6055, 8016, -23105,
-17906, 21542, 10753, -2333, -980, -3518, 735, -5344, -14083, 1274, 10879, 1242, -11176, 3115, 9240, -4921, 4845, 10002, 4666, -254,
1535, 8637, 8326, 2846, -9913, -14967, -8002, -10413, -6174, 1896, 5225, 4527, -7619, 833, 15956, 2979, -6473, -126, 1406, -2771,
-4462, 2467, 12362, 13521, -2962, -9791, -6519, 4907, 10543, -2386, 1155, 456, 1961, -3742, -12272, -14505, 605, 8314, -2949, -3230,
646, 2247, -588, 2693, 2869, 68, 1994, -5566, -5273, 800, 3120, 3619, 8987, 7097, 4319, -1317, -8914, -4578, -1040, -4836,
-4262, 4223, 1019, -452, 4094, 3775, 4601, 2876, 1714, 462, 1988, -2253, -7074, -4760, -2503, -879, 174, 4089, 1736, -2312,
-1741, 613, 3585, 3169, 3067, 3854, 1393, -2488, -3713, -1247, -335, 1359, 2874, 4055, 5390, -2091, -2643, 4248, 4199, -397,
-5776, -6695, -7460, -2744, 1000, 2819, 8074, 8508, 3501, -3337, -2273, 1240, 1576, -1493, -1355, 6075, 12, -8250, -7828, -4626,
-367, 1003, -1950, -1004, 4962, 2629, 647, -580, -2503, 2194, 7508, 3701, -135, -1108, 905, 2313, 3922, 1666, -2626, -1520,
-3706, -4043, -2387, 184, 1657, 3104, 4581, 3579, 1986, 657, 2004, 1720, -202, -4671, -1441, -1129, -1901, 1407, 743, 1050,
2131, -3641, -3096, 2834, 1341, -3422, -1816, -1131, -3339, 2119, 5016, 774, 641, 1935, 2608, -1278, -2656, -2167, -547, 2734,
-1009, -3060, 853, 1830, 3439, 3804, 2416, 1048, 228, 1250, 2723, 405, -4337, -4708, -3184, -2325, -63, 1049, 86, 3085,
5161, -978, -3847, -415, 1859, -130, -1463, -986, 1918, 3792, 480, -2048, 2199, 4905, 310, -2602, -2265, -219, 3387, 2797,
-333, -998, -943, -1172, 890, 1464, 1147, -2772, -3237, 675, 3207, 3986, 2965, -2358, -4142, -1526, -1186, 1566, 1134, -781,
-1590, -3269, -1253, 1947, 3294, 1761, 1417, 2119, 2645, 2502, 1054, -495, -1615, 338, -535, -2675, -1004, -435, -876, -255,
680, 884, -50, -1020, -2061, -1146, 2332, 2300, 2370, 2577, 644, 741, 3286, 2564, 973, 110, -604, 443, 187, -1096,
-1826, -2897, -4133, -2031, -2445, -1637, 4916, 1997, -1462, 671, 1338, 1499, 1867, 2682, 3660, 2839, -94, -2218, -1050, 698,
-1385, 712, -1412, -4561, -1540, -696, 413, 2287, 2488, 1341, 771, -85, -977, -1649, 566, 3210, 2190, 1082, -714, 492,
408, -256, 141, -844, -156, -923, -1679, -632, 171, 112, 1069, 733, -410, 175, -377, -560, 2423, 2142, 772, 2301,
-115, -1887, 1451, 49, -1540, -1269, 821, 833, -253, 1023, 4371, 4679, -1573, -4368, -1589, 386, -1756, -2853, 216, 2131,
1306, -365, -1025, -106, 1318, 796, -157, -590, -108, 2154, 1385, 1270, 821, -260, 709, 628, 691, 952, 1756, 2461,
-450, -733, -1630, -2745, -1136, 1188, 1231, 358, 326, 522, 1200, 1334, 738, 189, 1820, 2986, 1608, -311, -782, -212,
-408, -453, 10, -731, -1489, 739, 1263, -1098, -1166, 553, -715, -877, 164, 127, 287, 2843, 2502, 1165, 89, 3159,
-1288, -2080, 3410, -5946, -9536, 714, 8781, 1833, 3226, 5341, -985, -3761, -1945, -5659, 1137, 9141, 1673, -1773, 2049, -784,
-3755, -892, -341, 1667, 3967, 229, -2587, -1839, -3913, -4739, 1427, 4522, 2928, -283, -856, -1911, 530, 2261, 953, 2151,
785, -2053, -541, 1237, 720, 931, 1498, 1445, 1220, -1337, -2724, 426, 1458, -1008, 249, 991, 1148, 348, -679, -302,
34, 1319, 1981, 2739, 2425, 2208, 1726, -994, -2498, -2273, -245, 1254, 958, 96, -1464, -1359, 409, 913, 615, 610,
-339, -1144, -2325, -1910, -645, 1715, 1306, 720, 808, 182, 514, 859, 1243, 892, 196, -205, 111, 1813, 3090, 2071,
732, -1279, -1378, -254, -315, -1233, -1639, -1525, -2200, -1413, 466, 582, -214, 833, 1193, 1997, 1965, -762, -1587, 1583,
3204, 1272, 1918, 2988, 947, -946, -3073, -5408, -2541, 1409, -136, 271, 2613, -1076, -3378, -1490, 546, 2168, 3983, 3394,
1877, 2638, 1781, -844, 774, 2007, -1751, -2317, 994, 3571, 348, -6057, -5647, -2225, -1707, -3024, -2005, 1838, 2884, 1657,
1032, 3460, 4885, 2684, 884, 841, 1056, 1926, 1694, 14, 1072, 1812, 257, -294, -2177, -4357, -5532, -3996, -930, 1202,
83, -304, 871, 1706, 1871, 2702, 2870, 2325, 2298, 1009, -1097, -609, 715, 653, 434, -434, -984, -593, -1069, -1865,
-1781, -485, -269, -904, -1435, -942, -612, -828, 1110, 3434, 3830, 3244, 2489, 1435, 1134, 762, 766, 336, -493, -1062,
-839, -341, -905, -1801, -2051, -1977, -1493, -1240, -1122, 22, 365, -560, -195, 619, 851, 805, 874, 1515, 2562, 2689,
1869, 1164, 285, -655, -825, -568, -474, -295, -17, -484, -431, -212, -60, 186, 227, -24, -206, 61, -124, 116,
490, 907, 1472, 1414, 963, 424, 13, 80, 94, -95, -249, -707, -1327, -1870, -1763, -417, 691, 1108, 1232, 860,
214, 69, 1191, 1839, 1135, 296, 476, 811, 708, 137, -67, 66, -391, -441, -90, -157, -629, -1118, -1260, -1223,
-1325, -947, -314, 40, 389, 1002, 1602, 1640, 1597, 1488, 1294, 479, 76, -249, -349, -409, -646, -339, -197, -580,
-801, -597, -526, -425, -900, -1018, -540, -307, 340, 877, 1065, 1214, 875, 511, 598, 879, 1184, 1161, 275, -430,
-863, -1131, -1010, -892, -713, -545, -668, -406, 135, 215, 244, 573, 391, 81, 209, 434, 313, 430, 514, 600,
816, 820, 809, 540, 254, -356, -796, -720, -646, -828, -672, -339, -165, -43, 264, 725, 785, 473, 61, -317,
-169, 365, 578, 379, -8, -298, -667, -708, -183, 381, 451, 393, 166, 103, 249, 20, -294, -384, -243, -294,
-102, 276, 409, 332, 178, -25, -168, -196, -359, -348, -245, -190, -57, 34, 49, -14, 85, 112, 43, 84,
11, 32, -27, -433, -500, -254, -105, -29, 131, 430, 337, -61, -145, -56, -111, -130, -3, -204, -326, -89,
27, 246, 576, 576, 352, -9, -619, -925, -520, 22, 245, 119, 33, 33, 34, -33, -6, 201, 303, 123,
-74, -85, 120, 257, -124, -220, -122, -127, -328, -405, -276, 34, 187, 214, 410, 266, -59, -189, -126, 171,
107, -181, -3, -145, -457, -126, 383, 349, 333, 272, 124, 19, -80, -141, -36, -185, -460, -129, -55, -195,
-320, -279, 20, 107, -212, -355, -194, -164, -21, 228, 320, 340, 139, -20, -32, 91, 211, 258, 155, 13,
33, 63, -28, -102, -225, -387, -396, -307, -330, -317, -193, -214, -371, -294, 105, 284, 200, 192, 401, 481,
337, 207, 147, 151, 160, 64, -178, -98, 28, -233, -489, -638, -509, -357, -244, -120, -86, -46, 305, 449,
327, 188, 62, 24, 103, 173, 196, 157, 3, -77, -203, -341, -264, -326, -473, -324, -222, -268, -39, 197,
304, 322, 207, 18, -164, -29, -49, 100, 480, 370, 256, 225, 172, 14, -20, -131, -243, -293, -399, -420,
-324, -81, 0, -270, -230, -28, -26, -98, -97, 63, 14, -355, -300, 58, 99, -22, -23, -42, -10, -156,
-248, -159, -62, -108, -180, -103, -30, -142, -279, -252, -143, -37, 152, 267, 235, 230, 227, 66, -131, -98,
-122, -170, -204, -224, -315, -284, -172, -87, 33, 91, -110, -201, -54, 129, 210, 230, 187, 89, 5, 48,
122, 169, 160, 104, -74, -213, -321, -541, -494, -146, -63, -251, -339, -222, -192, -337, -348, -195, -27, 81,
31, -36, 89, 267, 458, 256, 105, 145, 160, -9, -113, -222, -271, -180, -228, -408, -455, -422, -347, -291,
-198, 7, 188, 62, 11, 42, 107, 109, 1, 14, 58, -70, -337, -330, -122, -51, -18, -168, -401, -453,
-378, -267, -131, 4, 48, -73, -98, -69, -62, 9, 112, 134, 22, -165, -250, -260, -189, -186, -229, -279,
-119, 41, -66, -298, -190, -5, -56, -164, -76, -61, 16, 60, -9, -54, -62, -36, -1, 0, -49, 49,
67, -64, -268, -425, -414, -341, -287, -282, -181, -127, -124, -18, 166, 171, 62, -63, -151, -200, -76, 105,
117, 80, -52, -264, -291, -167, -92, -53, -79, -112, -381, -497, -344, -141, 4, -107, -251, -217, -141, -260,
-153, 185, 160, -227, -146, 19, -116, -109, -169, -194, -171, -156, -219, -320, -555, -589, -406, 27, 265, 252,
11, -261, -140, -35, -110, 27, -49, -149, -76, -228, -414, -96, 232, 167, 11, -162, -374, -413, -370, -203,
3, -93, -247, -384, -401, -154, 54, 74, 110, 299, 246, 87, -32, 235, 344, 74, -77, -356, -604, -693,
-597, -248, 58, 84, -154, -289, -190, -39, 126, 192, -115, -239, -192, -306, -146, 107, 211, -93, -323, -233,
-189, -342, -410, -232, -138, -166, -265, -294, -253, -135, -53, 68, 181, 154, -19, -80, -100, -111, -404, -699,
-533, -244, -243, -162, -276, -30, 334, 52, -703, -211, 473, 188, -1745, -3873, -4722, -4088, -2443, -572, 703, 1974,
2659, 4141, 4787, 3831, 1918, -801, -3014, -2519, -2644, -2202, -4559, -1912, 2715, 3353, 1055, -127, -60, -3096, -6396, -7876,
-6338, -1417, 3639, 3256, 2415, 1524, 1117, 4650, 6492, 7034, 3298, -2782, -5631, -4738, -4616, -2211, -420, -8495, -8881, -733,
8244, 12302, 4149, -5117, -6847, -1756, 1986, 3071, 2591, -764, -3100, -4135, 880, 5720, 5722, 1004, -3452, -4601, -2695, 1871,
5563, 2412, -2900, -5316, -4489, -2721, -731, 201, -1626, -3552, -3261, 174, 3954, 6024, 4947, 1169, -2653, -5433, -5282, 46,
6839, 8091, 4006, 987, 771, 816, -216, -1840, -3370, -4792, -5268, -5308, -3185, -3143, -2873, -2372, 681, 4886, 7058, 4211,
2220, 587, 736, 2382, 3145, 4873, 4081, 472, -4066, -5362, -2360, 824, 2593, 1875, -1737, -4679, -6894, -6181, -3034, -1099,
1033, 1855, 3536, 3460, 2229, 3779, 1539, 151, 507, 1624, 1236, 21, -1301, -2235, -1533, -668, -131, 33, -1070, -453,
1532, 1074, -2500, -3642, -2514, -2025, -533, 1196, 2369, 1820, 320, -1403, -1613, 561, 1504, 590, 327, 818, -1335, -2465,
-3061, -1322, 1182, 1948, 2115, 1308, -407, 56, 1594, 2518, 2564, 86, -4100, -4854, -3681, -1912, -125, -680, -1000, -839,
-763, 1831, 4438, 2676, 1239, -645, -705, 1147, 1037, 2171, 1735, -1133, -2691, -1403, 68, -159, -688, -3372, -3347, 1136,
2880, 2222, 943, -1555, -3269, -1822, 1776, 4665, 4076, -979, -5703, -4766, -140, 4350, 4612, 1543, -2124, -4070, -2508, -859,
2048, 1440, -473, -83, 473, -170, -836, -828, -1087, -1748, -1819, 730, 4383, 3950, 1132, -1185, -901, 641, 726, -541,
-1592, -4323, -3897, -578, 1585, 2349, 1506, -861, -1847, -550, 632, 1356, 2405, 1609, -822, -3440, -3153, -1055, 1731, 2848,
109, -2131, -2403, -1732, -651, 2157, 3810, 2196, -1063, -3410, -2126, 283, 433, 109, 238, -950, -1889, -1332, -463, 849,
133, -1094, -523, 1366, 719, 87, 550, -168, -294, -251, 436, 1938, 1041, -1081, -2046, -1602, -197, 871, -651, -2128,
-2194, -1858, -241, 440, 1327, 1222, -346, -990, -765, 345, 422, -541, -453, -141, 23, 386, 1208, 2069, 1702, 342,
-963, -1429, -698, -407, -242, 269, -210, -1207, -1852, -776, 234, 941, 783, 85, -270, -477, 46, 68, -38, -639,
-1328, -1255, -600, 201, 612, 443, 41, 350, 800, 932, 672, 266, -8, -510, -541, -69, 262, 154, -436, -813,
-724, -510, -63, -47, -56, -137, -453, -471, -332, -240, -304, -245, 136, 266, 396, 344, 490, 675, -12, -524,
-1110, -1055, -647, -52, -56, -213, -174, -220, -284, -247, 146, 326, -70, -630, -845, -731, -152, 356, 571, 297,
-246, -465, -361, -293, -213, -14, -176, -343, -346, -413, -559, -565, -346, 17, 90, -293, -691, -553, -491, -313,
12, 120, -296, -335, 35, 303, 508, 424, 81, -334, -313, 118, 371, -88, -694, -679, -468, -361, -85, -263,
-753, -988, -798, -409, -18, -47, -143, 63, 172, 201, 566, 746, 453, 128, -98, -49, 477, 751, 493, 38,
-305, -705, -918, -318, -7, -525, -686, -558, -383, -213, -298, -290, -228, -389, -105, 366, 565, 67, -495, -268,
81, -48, 17, 20, -246, -241, -474, -751, -286, 372, 493, -23, -406, -331, -299, -105, 207, 668, 404, -604,
-949, -937, -636, -265, -432, -624, -456, -170, 164, 517, 952, 1279, 436, -638, -802, -370, 46, 209, -266, -853,
-952, -364, 494, 833, 443, -654, -1343, -1171, -686, -126, 163, -424, -969, -906, -492, 381, 1365, 1383, 334, -712,
-1450, -946, 69, 452, 130, -218, -118, 125, 313, 829, 1004, 551, 72, -704, -700, -613, -799, -984, -839, -502,
-135, 484, 923, 806, 34, -417, -637, -673, -162, 190, 273, -48, -562, -667, -63, 671, 710, 169, -170, -228,
-177, -54, -55, -186, -367, -401, -243, -74, 45, -112, -396, -369, -27, 192, 188, 119, 138, -49, -345, -495,
-390, -313, -123, 11, -39, -192, -201, -223, -169, -93, -181, -504, -581, -244, 13, 110, 129, 113, 256, 258,
136, 142, 35, -83, -333, -529, -493, -277, -103, -61, -129, -226, -206, -7, 99, -12, -247, -415, -372, -135,
29, 133, 268, 308, 102, -102, -197, -274, -160, -90, -225, -369, -218, 91, 282, 376, 351, 152, -30, 12,
57, -110, -251, -186, -268, -281, -151, -159, -138, -23, -120, -375, -403, -247, -22, 151, 223, 191, 182, 71,
71, 75, -35, 12, -42, -94, -176, -232, -212, -139, -130, -193, -243, -215, -48, -25, -94, -92, -7, 29,
43, -3, -144, -208, -118, -87, -171, -127, -105, -76, 8, -2, -112, -4, 111, -17, -85, -137, -183, -177,
-148, -97, -21, 57, 29, 31, 82, 71, 24, -32, -295, -493, -538, -247, 27, 370, 610, 487, 226, -104,
-186, -307, -418, -452, -467, -797, -766, -214, 288, 510, 493, 170, -274, -267, 83, 231, 148, 10, 9, -31,
92, 496, 952, 1156, 1039, 892, 624, 344, -5, -270, -515, -788, -1040, -1069, -827, -592, -332, -3, 225, 470,
618, 384, 75, -81, -97, -146, -156, -124, -217, -321, -327, -266, -115, 31, 225, 307, 447, 579, 351, 191,
214, 200, -64, -548, -644, -475, -461, -741, -777, -444, 59, 327, 94, 106, 165, 230, 313, 459, 409, 559,
611, 180, 38, -44, -108, -191, 27, -195, -518, -841, -1091, -702, -411, -215, -502, 37, 660, 689, 722, 643,
781, 712, 558, 240, 162, -58, -663, -782, -330, -161, -469, -474, 11, 337, -374, -770, -201, 200, 132, 278,
484, 497, 389, -95, 113, 561, 586, 246, 236, 329, -97, -660, -599, -165, -328, -814, -627, 81, 450, 45,
-280, 226, 738, 374, 23, 318, 857, 609, -72, -63, 283, 244, -250, -529, -79, 212, -343, -654, -96, 332,
56, -307, 137, 503, 129, -465, -259, 476, 561, -14, -153, 154, 7, -627, -917, -482, 164, 65, -161, 156,
695, 498, 148, 314, 643, 441, -260, -353, 56, 241, -65, -288, -244, -224, -508, -617, -218, 22, -249, -548,
-214, 239, 310, 123, 242, 422, 224, -46, 106, 498, 665, 397, 163, 176, 111, -126, -352, -152, 205, 244,
-26, -78, 68, 109, 15, -14, 152, 197, 93, 68, 143, 181, 88, 45, 107, 158, -6, -175, -213, -173,
-159, -147, -37, 112, 58, -70, -5, 207, 328, 164, 25, 186, 369, 356, 222, 49, -83, -161, -180, -73,
106, 198, 327, 368, 335, 114, -80, -113, -98, -246, -252, -107, -30, 6, 0, 82, 151, 207, 280, 284,
224, 119, 97, 106, 205, 317, 369, 313, 268, 180, 32, -78, -8, 80, 66, -73, -235, -317, -178, -22,
23, 57, 151, 141, -119, -481, -460, -150, 131, 250, 114, 301, 600, 1374, 1338, 727, -117, -1137, -1491, -1307,
-950, 129, 222, -397, 199, 631, 762, 1136, 1028, 558, -952, -1736, -2107, -579, 850, 691, 1087, 1398, 1771, 2015,
2181, 1468, -56, -1240, -1159, 146, -345, -1903, -2763, -1785, -953, 547, 1742, 1266, 236, -847, -1545, -1122, 117, 697,
371, -856, -1158, 541, 2380, 1772, 607, 89, -1316, -1773, -754, 1081, -36, -1265, -1379, -214, 1076, 1758, 2420, 1668,
1990, 942, -659, -492, 382, 151, -455, -971, -1589, -760, -95, 914, 1106, -126, -2096, -3127, -1155, 536, 749, 145,
62, 590, 528, 586, 1433, 1168, 104, -111, 485, 902, -178, 119, 287, 148, 111, 425, 1355, 1169, 233, -607,
-98, 513, -78, 336, 336, 1066, 1161, -23, -232, -236, -315, -16, -712, -921, -392, -729, -383, -362, 1, 425,
900, 703, -173, 102, 856, 2098, 1717, 174, -742, -541, 750, 1848, 1372, 317, -418, -1206, -1317, -972, 243, 1728,
1519, -243, -1301, -1255, -368, 1094, 1177, 171, -348, 163, 569, 675, 438, -8, -453, -816, -402, -215, -403, -78,
683, 654, 754, 1150, 838, 64, -151, 412, -122, -939, -1489, -1141, 55, 504, 81, -325, 71, 649, 1272, 1306,
354, -547, -430, 651, 1106, 725, 89, -157, -121, -28, 362, 813, 610, -369, -1547, -1641, -738, 152, 395, -230,
-210, -97, 501, 1166, 1146, 1108, 718, 110, -426, -185, 369, 490, 343, 33, 89, 558, 923, 835, 271, -135,
-160, 80, 395, 546, 499, 214, -84, -129, 39, 330, 266, 57, -312, -599, -550, -216, -84, -225, -452, -364,
108, 486, 703, 1110, 1045, 504, -3, -34, 267, 626, 652, 29, -637, -668, -218, 315, 606, 628, 498, 109,
45, 196, 350, 301, 141, -133, -185, 29, 211, 174, -97, -388, -331, -109, -20, -8, -168, -265, -142, 141,
406, 587, 561, 388, 135, 63, 276, 495, 502, 176, -165, -275, -230, -87, 211, 414, 427, 339, 170, 78,
154, 272, 206, 73, -184, -320, -74, 185, 287, 134, 2, -77, -6, 127, 110, 43, 7, 10, -15, -59,
44, 59, 23, 117, 287, 325, 282, 300, 371, 369, 363, 279, 80, -56, 45, 81, 27, 56, 250, 291,
-22, -133, 120, 198, 11, -31, -107, -16, 157, 79, -116, -316, -182, -26, -14, -7, 200, 296, 480, 463,
242, 383, 499, 314, 265, 321, 16, -78, 45, -35, -121, 9, 166, -69, -60, 102, 152, 5, -88, 203,
125, -120, 77, 379, 387, 164, -103, -364, -423, -275, -99, -32, -47, -341, 189, 1004, 748, 328, 160, 106,
293, 207, -207, -130, 178, 656, 427, -128, -43, 20, 151, 412, 589, 45, -1, 254, 411, 490, 387, -73,
-207, 54, -222, -40, 281, 270, -357, -982, -669, 142, 559, 292, 50, 58, 67, -112, 200, 896, 1018, 485,
-102, -347, -155, 71, 328, 891, 531, -7, 287, 525, 384, -279, -135, 213, 484, 474, -35, -154, -78, -136,
79, 473, 599, 310, 180, 216, 141, 142, 177, 172, -155, -495, -171, 247, 359, 245, 108, 304, 542, 717,
761, 475, 239, 305, 379, 657, 324, -35, -117, 60, 269, 193, -2, -82, -1, 111, 315, 290, 93, -189,
-252, 27, 462, 740, 656, 437, 245, 291, 329, 377, 336, 164, -55, -191, -132, 36, 464, 625, 383, 108,
-49, -146, -86, -19, 10, -1, 0, 229, 525, 633, 706, 676, 364, 118, 67, 75, 247, 379, 346, 272,
200, 169, 91, 66, 159, 50, -40, -105, -87, 51, 145, 162, 50, 142, 332, 364, 527, 434, 303, 237,
211, 346, 371, 173, 79, 18, 101, 424, 639, 547, 380, 294, 151, 74, 161, 504, 679, 430, 193, 64,
200, 236, 318, 283, 117, 95, 52, 112, 126, 164, 113, -53, -139, -148, 30, 278, 226, 131, 257, 501,
777, 872, 732, 576, 432, 263, 164, 13, -36, 44, 264, 406, 367, 209, 142, 240, 215, 136, 185, 250,
271, 259, 299, 369, 314, 333, 441, 428, 302, 39, -10, 200, 139, -35, 160, 339, 360, 483, 186, 53,
529, 812, 538, 57, -248, -326, -85, 191, 432, 358, 3, -2, 234, 472, 640, 488, 327, 191, 99, 248,
407, 434, 308, 111, -123, 109, 629, 680, 497, 228, -104, -286, -87, 344, 611, 418, 71, -93, 221, 669,
669, 451, 294, 112, 129, 369, 512, 530, 436, 262, 363, 766, 792, 527, 215, -228, -402, -303, -30, 451,
683, 485, 60, -81, 146, 410, 392, 122, -130, -60, 124, 239, 272, 382, 394, 287, 354, 438, 497, 484,
291, 178, -82, -180, 76, 501, 713, 484, 19, -242, 6, 252, 403, 412, 39, -247, -324, -86, 497, 870,
781, 526, 320, 292, 245, 340, 397, 186, -145, -275, -191, -42, 76, 150, 153, 134, 136, 147, 202, 261,
361, 404, 349, 270, 116, 43, 150, 321, 379, 355, 231, 177, 217, 149, -14, -73, 37, 122, 68, -7,
123, 192, 272, 473, 598, 548, 287, -8, -179, -175, -76, 30, 157, 215, 198, 182, 335, 561, 558, 422,
225, 126, 107, 100, 106, 144, 208, 203, 145, 143, 239, 346, 369, 285, 173, -13, -149, -210, -121, 44,
158, 159, 220, 303, 280, 327, 319, 226, 182, 153, 145, 83, 60, 175, 175, 85, 64, 74, -23, 29,
67, -126, -231, 54, 304, 418, 437, 264, 311, 274, -83, 22, 575, 673, 268, -117, -219, -163, -67, 112,
327, 476, 302, 72, 4, 187, 384, 180, -62, -29, 190, 174, 59, 111, 400, 366, 74, 45, 409, 478,
154, -71, 8, 331, 436, 330, 257, 306, 94, -167, -157, 90, 195, 7, -198, -214, 13, 255, 358, 513,
544, 313, 120, 261, 467, 409, 217, -35, -155, -88, -89, 79, 373, 488, 426, 280, 145, 33, -37, -65,
108, 313, 392, 274, 148, 245, 276, 258, 263, 252, 178, 83, -58, -105, 4, 11, -42, 134, 208, 71,
-93, -168, 8, 239, 394, 431, 327, 123, 6, 108, 370, 452, 309, 101, 11, 137, 260, 325, 229, 94,
-103, -289, -300, -200, 16, 185, 286, 306, 268, 218, 190, 213, 286, 270, 213, 150, 142, 175, 183, 232,
235, 246, 185, 93, 142, 137, 45, -33, -21, 70, 107, 94, 73, 90, 193, 287, 305, 291, 264, 205,
90, 4, 57, 118, 173, 237, 212, 159, 121, 151, 198, 167, 86, 7, -7, 91, 137, 235, 336, 334,
203, 151, 178, 198, 181, 135, 91, 76, 38, -13, 108, 214, 194, 42, -24, 32, 96, 215, 291, 284,
189, 143, 134, 84, 96, 81, -14, -139, -137, 81, 200, 243, 207, 160, 81, 69, 247, 385, 294, 122,
41, 72, 161, 224, 226, 168, 63, 2, 25, 145, 235, 221, 132, 15, -2, 81, 152, 122, 85, 90,
163, 241, 269, 192, 149, 105, 80, 121, 216, 272, 254, 191, 184, 134, 127, 168, 147, 21, -56, 1,
86, 168, 186, 107, 32, 26, 118, 159, 194, 231, 227, 215, 163, 118, 108, 144, 183, 125, 25, 14,
87, 184, 253, 235, 158, 63, -3, -6, 73, 128, 118, 79, 72, 119, 139, 150, 175, 154, 121, 65,
100, 164, 146, 106, 93, 105, 117, 120, 103, 47, 33, 92, 136, 73, 57, 82, 139, 130, 125, 121,
121, 108, 113, 118, 87, 53, 66, 35, 10, -13, -4, 22, 78, 111, 110, 107, 77, 33, 5, 9,
42, 72, 136, 175, 157, 102, 157, 262, 265, 198, 159, 101, 17, -32, -1, 61, 51, 26, 2, -1,
30, 95, 154, 142, 115, 121, 148, 135, 85, 21, 8, 20, 78, 99, 50, -9, 2, 39, 57, 28,
79, 104, 75, 18, -20, 9, 99, 150, 149, 88, 23, -21, -2, 7, -28, -13, 18, 46, 19, 14,
-10, 12, 42, 63, 29, 13, 27, 74, 112, 115, 112, 85, 70, 50, 47, 57, 65, 60, 64, 26,
21, 25, 50, 88, 99, 30, -25, 14, 45, -2, -33, 26, 84, 128, 73, -19, -48, -24, 7, 13,
14, 14, 32, 27, 26, 54, 65, 45, 31, 38, 19, -13, -8, -1, 13, 36, 56, 82, 74, 64,
38, 43, 37, 30, -15, -56, -64, -49, -33, -3, 16, 19, 35, 62, 56, 2, -10, 5, 19, 22,
44, 70, 64, 47, 6, -26, -45, -23, -10, -18, -56, -77, -78, -23, 30, 44, 2, -21, -14, 17,
16, 21, 23, 3, -49, -73, -91, -71, -4, 25, -15, -39, -24, 21, 54, 87, 71, 14, -20, -72,
-92, -97, -30, 3, -14, -35, -11, 12, 9, 17, 23, 10, -19, -40, -26, -34, -47, -71, -60, -21,
6, 14, -15, -10, 13, -6, -17, -4, 14, -33, -72, -108, -89, -24, 47, 43, -23, -78, -90, -77,
-78, -65, -81, -97, -114, -117, -100, -61, 3, 5, -19, -19, -19, -43, -74, -44, -21, -12, -44, -57,
-69, -91, -108, -96, -88, -111, -113, -111, -128, -115, -95, -86, -75, -55, -44, -69, -70, -81, -64, -51,
-21, -50, -86, -115, -115, -81, -44, -20, -59, -116, -161, -129, -118, -100, -89, -64, -114, -157, -136, -138,
-134, -133, -129, -136, -98, -74, -54, -34, 0, -6, -20, -43, -91, -116, -123, -134, -152, -160, -151, -115,
-114, -122, -128, -127, -143, -109, -80, -65, -66, -53, -57, -70, -71, -67, -82, -129, -169, -192, -188, -178,
-161, -163, -182, -192, -193, -137, -125, -112, -128, -144, -128, -116, -122, -132, -159, -171, -187, -182, -172, -141,
-111, -118, -142, -156, -123, -101, -95, -138, -144, -167, -163, -148, -135, -140, -183, -177, -170, -153, -135, -126,
-144, -179, -185, -182, -197, -162, -156, -170, -199, -184, -183, -180, -170, -179, -174, -167, -162, -174, -203, -226,
-212, -169, -167, -178, -211, -207, -193, -195, -220, -250, -245, -238, -257, -258, -255, -238, -194, -147, -139, -164,
-147, -127, -116, -125, -131, -126, -154, -171, -208, -241, -247, -229, -229, -267, -292, -262, -232, -231, -239, -237,
-260, -263, -239, -216, -218, -204, -211, -233, -251, -240, -254, -240, -235, -231, -261, -279, -286, -254, -262, -279,
-283, -253, -236, -234, -257, -275, -288, -281, -284, -307, -295, -293, -292, -292, -270, -252, -205, -158, -165, -199,
-213, -218, -207, -220, -244, -279, -292, -302, -294, -286, -288, -267, -269, -309, -330, -300, -288, -254, -246, -247,
-259, -269, -230, -209, -211, -240, -255, -267, -252, -279, -298, -296, -296, -309, -336, -342, -323, -295, -300, -306,
-322, -325, -302, -294, -309, -309, -298, -275, -273, -254, -262, -287, -292, -242, -211, -216, -216, -214, -229, -275,
-306, -284, -282, -280, -306, -323, -322, -295, -271, -267, -267, -278, -291, -314, -315, -298, -291, -283, -286, -294,
-307, -296, -259, -255, -277, -302, -319, -305, -311, -301, -309, -332, -348, -342, -339, -325, -307, -315, -313, -316,
-304, -323, -324, -317, -326, -359, -355, -308, -264, -256, -270, -288, -255, -243, -244, -269, -306, -323, -341, -342,
-338, -329, -318, -314, -319, -336, -316, -287, -245, -243, -268, -286, -295, -277, -264, -264, -276, -266, -256, -287,
-319, -331, -314, -318, -336, -353, -345, -356, -323, -321, -301, -310, -288, -260, -279, -298, -310, -315, -331, -329,
-337, -358, -348, -315, -268, -273, -247, -240, -216, -215, -234, -260, -239, -244, -250, -293, -341, -356, -344, -295,
-257, -256, -281, -287, -287, -290, -273, -270, -247, -263, -299, -310, -304, -278, -233, -212, -245, -293, -291, -265,
-281, -299, -294, -269, -285, -310, -326, -315, -314, -274, -287, -301, -294, -284, -266, -271, -274, -288, -261, -230,
-225, -239, -223, -206, -183, -159, -174, -211, -239, -239, -253, -271, -299, -280, -278, -296, -308, -284, -246, -218,
-187, -200, -233, -234, -219, -203, -210, -231, -209, -212, -217, -228, -245, -238, -236, -243, -246, -270, -267, -256,
-276, -288, -295, -276, -239, -203, -213, -225, -241, -225, -216, -232, -245, -257, -263, -254, -259, -268, -236, -181,
-146, -159, -183, -186, -190, -175, -196, -209, -215, -216, -224, -257, -259, -246, -214, -186, -175, -194, -229, -248,
-206, -194, -212, -211, -202, -207, -212, -226, -224, -214, -179, -175, -196, -242, -264, -247, -244, -222, -206, -204,
-226, -241, -248, -235, -223, -187, -188, -225, -252, -259, -216, -183, -179, -184, -175, -170, -177, -188, -174, -143,
-131, -152, -186, -227, -257, -258, -223, -223, -240, -246, -223, -224, -218, -204, -196, -174, -160, -164, -192, -212,
-163, -162, -148, -158, -153, -175, -221, -257, -263, -241, -220, -220, -224, -249, -252, -256, -225, -193, -171, -156,
-173, -177, -224, -242, -223, -165, -152, -183, -213, -240, -244, -207, -162, -145, -146, -151, -163, -180, -179, -166,
-163, -166, -189, -212, -249, -256, -213, -193, -172, -162, -146, -178, -194, -198, -161, -137, -104, -122, -179, -208,
-222, -199, -172, -143, -156, -194, -221, -249, -236, -214, -161, -140, -155, -200, -230, -201, -199, -151, -152, -169,
-190, -201, -198, -206, -174, -156, -144, -171, -186, -195, -167, -136, -114, -120, -114, -137, -156, -190, -206, -204,
-219, -218, -211, -209, -213, -193, -150, -135, -144, -129, -154, -158, -166, -171, -188, -186, -179, -173, -180, -180,
-175, -156, -172, -182, -196, -177, -149, -172, -202, -216, -219, -200, -176, -157, -162, -180, -185, -152, -160, -174,
-154, -142, -160, -179, -181, -174, -163, -136, -106, -134, -156, -163, -138, -139, -154, -155, -143, -170, -167, -170,
-162, -164, -132, -128, -137, -141, -129, -123, -116, -138, -147, -144, -138, -141, -156, -144, -140, -134, -117, -125,
-148, -177, -177, -156, -175, -185, -173, -144, -154, -161, -161, -141, -140, -119, -96, -108, -134, -120, -125, -112,
-122, -108, -98, -102, -97, -92, -94, -77, -83, -92, -127, -128, -124, -126, -135, -149, -159, -154, -136, -107,
-108, -86, -80, -80, -75, -87, -97, -106, -85, -88, -101, -125, -129, -113, -117, -134, -129, -120, -119, -102,
-98, -109, -118, -99, -84, -80, -73, -68, -68, -82, -67, -58, -70, -58, -65, -80, -103, -103, -84, -65,
-48, -55, -35, -23, -23, -42, -60, -68, -66, -76, -92, -117, -106, -93, -71, -56, -57, -61, -54, -27,
-32, -37, -49, -50, -61, -70, -80, -96, -76, -53, -44, -56, -82, -83, -96, -95, -90, -73, -61, -66,
-69, -97, -78, -51, -21, -32, -44, -76, -90, -74, -44, -34, -38, -45, -45, -52, -47, -41, 1, 9,
11, -21, -48, -52, -43, -36, -51, -77, -100, -115, -99, -66, -49, -30, -6, 0, 0, -34, -45, -52,
-41, -52, -68, -86, -97, -79, -80, -73, -53, -48, -53, -92, -93, -93, -85, -67, -60, -53, -63, -43,
-44, -33, -36, -30, -19, -25, -35, -58, -71, -63, -50, -49, -48, -61, -45, -42, -17, -24, -27, -51,
-46, -84, -105, -107, -105, -102, -108, -99, -76, -65, -61, -50, -48, -47, -46, -49, -60, -83, -105, -96,
-92, -79, -82, -79, -86, -79, -94, -110, -119, -106, -103, -111, -129, -144, -136, -105, -85, -76, -73, -65,
-50, -61, -64, -78, -84, -89, -83, -103, -109, -111, -100, -94, -95, -90, -77, -90, -112, -135, -125, -121,
-95, -98, -109, -147, -129, -113, -83, -59, -58, -70, -78, -99, -126, -127, -106, -106, -109, -141, -165, -168,
-149, -124, -127, -130, -148, -148, -156, -158, -163, -136, -120, -99, -90, -107, -110, -110, -98, -114, -131, -133,
-143, -133, -149, -152, -142, -107, -88, -90, -109, -114, -89, -87, -89, -114, -140, -162, -170, -158, -174, -173,
-167, -152, -146, -144, -135, -107, -83, -82, -88, -107, -131, -143, -137, -131, -134, 0	
};
static const size_t g_shutterSamplesSize = sizeof(g_shutterSamples) / sizeof(int16_t);
#endif

#if defined(EEZ_PLATFORM_STM32)
uint8_t g_shutterSamples[16377] = {
255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 
0, 255, 0, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 255, 0, 255, 255, 0, 
255, 0, 0, 0, 255, 0, 255, 0, 0, 255, 0, 255, 255, 0, 255, 255, 0, 255, 0, 255, 0, 0, 255, 0, 
255, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 255, 0, 
255, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 255, 0, 255, 0, 0, 0, 
255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 
255, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 0, 0, 255, 0, 0, 
255, 0, 0, 255, 0, 255, 0, 255, 255, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 
255, 0, 255, 0, 255, 0, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 
255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 255, 0, 255, 255, 0, 255, 255, 0, 255, 255, 0, 255, 0, 
255, 0, 255, 0, 0, 0, 255, 0, 0, 255, 0, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 255, 0, 
0, 0, 255, 255, 0, 0, 255, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 0, 
255, 0, 255, 255, 0, 0, 0, 0, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 255, 0, 255, 
255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 255, 0, 255, 
255, 255, 255, 255, 0, 0, 0, 0, 255, 0, 255, 0, 0, 0, 255, 0, 255, 255, 255, 255, 0, 255, 0, 255, 
255, 0, 0, 255, 255, 255, 0, 0, 255, 0, 255, 255, 0, 0, 255, 0, 0, 0, 0, 255, 0, 255, 0, 255, 
255, 0, 0, 0, 0, 255, 255, 255, 0, 255, 0, 0, 255, 255, 0, 255, 255, 0, 255, 0, 0, 255, 255, 255, 
0, 255, 255, 0, 0, 0, 255, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 0, 
0, 255, 0, 255, 255, 255, 255, 0, 255, 0, 255, 255, 0, 0, 0, 0, 0, 255, 0, 0, 255, 0, 255, 255, 
0, 255, 0, 0, 0, 255, 0, 0, 255, 0, 0, 255, 255, 0, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 
255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 0, 255, 0, 0, 0, 0, 255, 0, 255, 255, 255, 255, 0, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 255, 
255, 255, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 0, 0, 255, 255, 0, 255, 0, 255, 
0, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 255, 255, 255, 0, 255, 255, 255, 255, 0, 255, 255, 
255, 0, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 255, 0, 255, 255, 0, 0, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 255, 255, 255, 255, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 255, 255, 
255, 0, 0, 255, 0, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 
255, 255, 255, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255, 0, 255, 0, 
0, 255, 0, 255, 0, 255, 0, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 255, 0, 0, 
0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 
0, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 255, 0, 255, 255, 0, 255, 255, 0, 255, 
0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 255, 255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 0, 255, 
0, 0, 0, 255, 0, 0, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 255, 0, 255, 0, 0, 255, 0, 255, 
0, 255, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 
0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 255, 0, 
255, 0, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 0, 
255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 0, 
255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 255, 255, 0, 255, 255, 
0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 0, 255, 0, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 255, 0, 255, 0, 255, 
0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 255, 0, 255, 255, 0, 255, 255, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 0, 255, 0, 
0, 255, 0, 0, 0, 0, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 0, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 255, 0, 0, 
255, 0, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 
0, 255, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 
255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 0, 255, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 255, 0, 255, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 255, 
0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 255, 0, 255, 255, 0, 0, 255, 
0, 255, 0, 0, 0, 255, 0, 255, 0, 0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 
255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 0, 255, 0, 
255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 
255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 
255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 
0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 0, 
255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 
255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 0, 255, 
0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 
0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 
0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
255, 0, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 0, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 0, 255, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
0, 255, 0, 255, 0, 0, 0, 255, 255, 0, 255, 0, 0, 255, 255, 0, 255, 0, 0, 255, 255, 0, 255, 255, 
0, 0, 255, 0, 0, 0, 0, 255, 255, 255, 0, 255, 0, 0, 0, 255, 0, 255, 255, 255, 255, 255, 255, 255, 
255, 0, 0, 255, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 
0, 0, 255, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 255, 0, 255, 255, 0, 0, 0, 
255, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 0, 
0, 0, 0, 255, 255, 255, 255, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 
0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 255, 255, 255, 255, 0, 0, 
0, 0, 255, 255, 0, 0, 255, 255, 255, 0, 0, 0, 255, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 
255, 255, 255, 0, 255, 0, 255, 255, 255, 255, 0, 0, 255, 0, 255, 0, 0, 255, 255, 255, 255, 255, 0, 0, 
0, 0, 0, 255, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 
255, 255, 255, 255, 0, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 0, 255, 0, 
0, 0, 255, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 255, 0, 0, 0, 
0, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255, 
0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 
0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 255, 0, 0, 0, 0, 0, 0, 255, 255, 
0, 0, 255, 0, 0, 0, 0, 255, 0, 255, 0, 0, 0, 255, 0, 0, 255, 255, 255, 255, 255, 0, 0, 255, 
0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 0, 0, 0, 0, 0, 255, 0, 255, 255, 0, 255, 255, 0, 0, 
0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 0, 255, 0, 255, 255, 
0, 255, 255, 255, 255, 0, 255, 0, 255, 0, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 255, 0, 255, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 0, 
255, 255, 255, 0, 0, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 0, 255, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 
0, 255, 0, 255, 255, 0, 0, 0, 0, 0, 255, 0, 0, 255, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 
0, 255, 0, 0, 0, 255, 0, 255, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 0, 255, 255, 
255, 0, 255, 255, 255, 0, 0, 255, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 255, 0, 0, 255, 0, 255, 255, 255, 255, 255, 255, 255, 
255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 0, 255, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 
255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 
255, 255, 255, 255, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 
0, 255, 255, 0, 0, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 
0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 255, 255, 
255, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 255, 0, 0, 255, 
255, 255, 255, 255, 0, 0, 255, 0, 0, 0, 255, 255, 255, 255, 0, 255, 0, 255, 0, 0, 0, 0, 255, 0, 
255, 255, 0, 255, 255, 0, 0, 0, 255, 0, 0, 255, 0, 0, 0, 255, 0, 255, 255, 255, 0, 255, 255, 0, 
0, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 
255, 255, 0, 255, 0, 255, 0, 0, 0, 255, 0, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 0, 
255, 255, 255, 255, 0, 255, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 
255, 0, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 0, 255, 255, 0, 255, 
255, 255, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 255, 0, 0, 255, 255, 0, 255, 255, 255, 0, 0, 0, 
255, 0, 0, 0, 255, 255, 255, 255, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 0, 
255, 255, 0, 255, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 255, 0, 255, 255, 255, 255, 0, 0, 0, 
0, 255, 255, 255, 0, 0, 255, 255, 255, 0, 0, 255, 0, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 
255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 
0, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 
0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 0, 0, 0, 255, 0, 0, 255, 0, 0, 255, 255, 0, 255, 255, 
255, 255, 0, 0, 255, 0, 0, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255, 0, 0, 0, 0, 0, 
255, 255, 0, 255, 0, 255, 0, 0, 0, 255, 0, 0, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 255, 
0, 255, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 0, 255, 255, 255, 0, 255, 0, 255, 0, 255, 255, 
255, 255, 255, 255, 255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 255, 0, 0, 255, 255, 0, 255, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 255, 0, 255, 0, 255, 0, 0, 0, 0, 0, 255, 0, 0, 255, 0, 255, 255, 255, 
255, 255, 255, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 0, 255, 
255, 0, 255, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 255, 255, 0, 255, 0, 
255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 
255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 0, 0, 255, 0, 0, 255, 0, 255, 255, 0, 255, 
0, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 255, 255, 255, 255, 
255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 255, 0, 255, 0, 255, 0, 0, 255, 0, 
255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 0, 0, 0, 255, 0, 0, 255, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 0, 0, 255, 255, 
0, 0, 0, 0, 0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 
255, 255, 0, 255, 255, 255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 255, 0, 255, 
0, 255, 0, 0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 0, 0, 0, 0, 0, 255, 0, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 0, 0, 
255, 0, 0, 255, 255, 0, 255, 255, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 255, 0, 255, 
0, 255, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 0, 255, 0, 
255, 255, 0, 255, 255, 255, 0, 255, 255, 0, 255, 255, 0, 255, 0, 0, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 0, 0, 255, 
0, 255, 255, 255, 255, 255, 0, 255, 255, 0, 255, 255, 255, 0, 255, 255, 0, 255, 255, 0, 255, 255, 0, 0, 
0, 0, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 255, 255, 255, 0, 0, 255, 0, 255, 
0, 255, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 255, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 255, 0, 
255, 255, 255, 255, 255, 255, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 
255, 0, 255, 0, 255, 0, 0, 255, 0, 0, 0, 255, 255, 0, 255, 0, 0, 0, 255, 0, 255, 255, 0, 255, 
255, 0, 255, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 0, 255, 0, 0, 255, 0, 255, 
0, 0, 255, 0, 255, 0, 0, 0, 255, 0, 0, 255, 0, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 0, 
255, 0, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 255, 255, 0, 255, 255, 0, 255, 0, 255, 0, 0, 
255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255, 255, 255, 0, 255, 255, 0, 0, 255, 0, 0, 255, 0, 255, 
0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 0, 255, 
0, 255, 0, 255, 255, 0, 0, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 0, 255, 0, 255, 0, 0, 255, 0, 0, 255, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255, 
0, 255, 255, 0, 255, 0, 0, 255, 0, 0, 0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 
255, 0, 255, 255, 0, 255, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 
0, 255, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 255, 0, 255, 255, 0, 255, 0, 
0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 
0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 
0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 0, 255, 0, 255, 
255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 0, 255, 255, 0, 255, 0, 255, 0, 
255, 0, 0, 255, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 0, 255, 0, 0, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 255, 255, 
255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 
0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 
0, 255, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 0, 
0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 
0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 
0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 255, 0, 255, 0, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 0, 255, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 255, 0, 0, 255, 0, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 255, 0, 255, 0, 0, 255, 0, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 
0, 255, 0, 255, 0, 255, 0, 255, 0
};
static const size_t g_shutterSamplesSize = sizeof(g_shutterSamples) / sizeof(uint8_t);
#endif

struct Tune {
	float *tune;
	uint32_t sampleRate;
	float durationBetweenNotesFactor;
#if defined(EEZ_PLATFORM_SIMULATOR)
	int16_t *pSamples;
#elif defined(EEZ_PLATFORM_STM32)
	uint8_t *pSamples;
#endif
	unsigned int numSamples;
};

#if !defined(__EMSCRIPTEN__)

#if defined(EEZ_PLATFORM_SIMULATOR)
#define SAMPLE_RATE 48000
#elif defined(EEZ_PLATFORM_STM32)
#define SAMPLE_RATE 12000
#endif

Tune g_tunes[] = {
	{ g_clickTune, SAMPLE_RATE, 1.3f },
	{ nullptr, 48000, 0, g_shutterSamples, g_shutterSamplesSize },
	{ g_beepTune, SAMPLE_RATE, 1.3f },
	{ g_powerUpTune, SAMPLE_RATE, 1.3f },
	{ g_powerDownTune, SAMPLE_RATE, 0.75f }
};

#endif

static int g_playNextTuneIndex = -1;
static int g_currentTuneIndex = -1;
static uint32_t g_currentTuneStartPlayTime;

////////////////////////////////////////////////////////////////////////////////

#define PI 3.14159265f

#if defined(EEZ_PLATFORM_SIMULATOR) && !defined(__EMSCRIPTEN__)
static const uint32_t g_memoryForTuneSamplesSize = 256000;
int16_t g_memoryForTuneSamples[g_memoryForTuneSamplesSize];
SDL_AudioDeviceID g_audioDevice;
#elif defined(EEZ_PLATFORM_STM32)
static const uint32_t g_memoryForTuneSamplesSize = SOUND_TUNES_MEMORY_SIZE;
uint8_t *g_memoryForTuneSamples = SOUND_TUNES_MEMORY;
#endif

#if !defined(__EMSCRIPTEN__)

uint32_t g_memoryForTuneSamplesOffset;

#if defined(EEZ_PLATFORM_SIMULATOR)
unsigned int generateTuneSamples(float *tune, int sampleRate, int16_t *pMemBuffer, float durationBetweenNotesFactor) {
#elif defined(EEZ_PLATFORM_STM32)
unsigned int generateTuneSamples(float *tune, int sampleRate, uint8_t *pMemBuffer, float durationBetweenNotesFactor) {
#endif

    unsigned int size = 0;
	for (int i = 0; !isNaN(tune[i]); i += 2) {
        if (i > 0) {
            // add silence between notes
			unsigned int silence = (unsigned int)roundf(durationBetweenNotesFactor * sampleRate * tune[i - 1]);
            memset(pMemBuffer, 0, silence * sizeof(uint16_t));
			size += silence;
            pMemBuffer += silence;
		}

		unsigned int duration = (unsigned int)roundf(sampleRate * tune[i + 1]);
		size += duration;
		
        float f = 2 * PI * tune[i] / sampleRate;

		for (unsigned int k = 0; k < duration; k++) {
#if defined(EEZ_PLATFORM_SIMULATOR)
			*pMemBuffer++ = (int16_t)clamp(32767.5f * sinf(k * f), -32768.0f, 32767.0f);
#elif defined(EEZ_PLATFORM_STM32)
			*pMemBuffer++ = (uint8_t)clamp(127.5f + 127.5f * sinf(k * f), 0.0f, 255.0f);
#endif
		}

	}

	// add zero to the end
	*pMemBuffer = 0;
	size++;

	return size;
}

#endif

////////////////////////////////////////////////////////////////////////////////

#if !defined(__EMSCRIPTEN__)
void initTune(Tune &tuneDef) {
    if (!tuneDef.pSamples) {
		tuneDef.pSamples = g_memoryForTuneSamples + g_memoryForTuneSamplesOffset;
		tuneDef.numSamples = generateTuneSamples(tuneDef.tune, tuneDef.sampleRate, tuneDef.pSamples, tuneDef.durationBetweenNotesFactor);
        g_memoryForTuneSamplesOffset += tuneDef.numSamples;
        assert(g_memoryForTuneSamplesOffset * sizeof(uint8_t) <= g_memoryForTuneSamplesSize);
	}
}
#endif

void init() {
#if !defined(__EMSCRIPTEN__)
	initTune(g_tunes[POWER_UP_TUNE]);
#endif

#if defined(EEZ_PLATFORM_SIMULATOR) && !defined(__EMSCRIPTEN__)
	SDL_InitSubSystem(SDL_INIT_AUDIO);

	SDL_AudioSpec desiredSpec;

	SDL_memset(&desiredSpec, 0, sizeof(desiredSpec));

	desiredSpec.freq = SAMPLE_RATE;
	desiredSpec.format = AUDIO_S16SYS;
	desiredSpec.channels = 1;
	desiredSpec.samples = 2048;

	SDL_AudioSpec obtainedSpec;

	g_audioDevice = SDL_OpenAudioDevice(NULL, 0, &desiredSpec, &obtainedSpec, 0);
	if (g_audioDevice == 0) {
		printf("Failed to open audio: %s\n", SDL_GetError());
	}
#endif
}

void startPlay(int iTune) {
#if !defined(__EMSCRIPTEN__)
    Tune &tuneDef = g_tunes[iTune];
	initTune(tuneDef);
#if defined(EEZ_PLATFORM_SIMULATOR)
    SDL_QueueAudio(g_audioDevice, tuneDef.pSamples, tuneDef.numSamples * 2);
    SDL_PauseAudioDevice(g_audioDevice, 0);
#elif defined(EEZ_PLATFORM_STM32)
	HAL_DAC_Stop_DMA(&hdac, DAC_CHANNEL_1);
	HAL_TIM_Base_Stop(&htim6);
	HAL_TIM_Base_DeInit(&htim6);
	htim6.Init.Period = 108000000 / tuneDef.sampleRate - 1;
	HAL_TIM_Base_Init(&htim6);
	HAL_TIM_Base_Start(&htim6);
	HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t *)tuneDef.pSamples, tuneDef.numSamples, DAC_ALIGN_8B_R);
#endif
#endif
}

void tick() {
#if !defined(__EMSCRIPTEN__)
#if defined(EEZ_PLATFORM_SIMULATOR)
	if (!g_audioDevice) {
		return;
	}
#endif

	if (g_currentTuneIndex != -1) {
		Tune &tuneDef = g_tunes[g_currentTuneIndex];
		uint32_t duration = tuneDef.numSamples * 1000 / tuneDef.sampleRate;
		if (millis() - g_currentTuneStartPlayTime > duration) {
			g_currentTuneIndex = -1;
		}
	}

	int iTune = g_playNextTuneIndex;
	if (iTune != -1) {
		g_currentTuneIndex = g_playNextTuneIndex;
		g_playNextTuneIndex = -1;

    	startPlay(g_currentTuneIndex);

        g_currentTuneStartPlayTime = millis();
	}
#endif
}

static void playTune(int iTune) {
	if (iTune > g_playNextTuneIndex && iTune > g_currentTuneIndex) {
		g_playNextTuneIndex = iTune;
    	if (
			osThreadGetId() == scpi::g_scpiTaskHandle ||
			osThreadGetId() == psu::g_psuTaskHandle ||
			g_playNextTuneIndex == POWER_UP_TUNE ||
			(g_playNextTuneIndex == BEEP_TUNE && !g_isBooted)
		) {
			tick();
		} else {
			using namespace scpi;
			osMessagePut(g_scpiMessageQueueId, SCPI_QUEUE_MESSAGE(SCPI_QUEUE_MESSAGE_TARGET_NONE, SCPI_QUEUE_MESSAGE_TYPE_SOUND_TICK, 0), osWaitForever);
		}
	}
}

void playPowerUp(PlayPowerUpCondition condition) {
#if OPTION_DISPLAY
	static PlayPowerUpCondition g_playPowerUpCondition;
	if (
		(condition == PLAY_POWER_UP_CONDITION_WELCOME_PAGE_IS_ACTIVE && g_playPowerUpCondition == PLAY_POWER_UP_CONDITION_TEST_SUCCESSFUL) ||
		(condition == PLAY_POWER_UP_CONDITION_TEST_SUCCESSFUL && g_playPowerUpCondition == PLAY_POWER_UP_CONDITION_WELCOME_PAGE_IS_ACTIVE)
	) {
		g_playPowerUpCondition = PLAY_POWER_UP_CONDITION_NONE;
    	if (psu::persist_conf::isSoundEnabled()) {
			playTune(POWER_UP_TUNE);
    	}
	} else {
		g_playPowerUpCondition = condition;
	}
#else
	if (condition == PLAY_POWER_UP_CONDITION_TEST_SUCCESSFUL) {
    	if (psu::persist_conf::isSoundEnabled()) {
			playTune(POWER_UP_TUNE);
    	}
	}
#endif
}

void playPowerDown() {
    if (psu::persist_conf::isSoundEnabled()) {
		playTune(POWER_DOWN_TUNE);
    }
}

void playBeep(bool force) {
    if (force || psu::persist_conf::isSoundEnabled()) {
		playTune(BEEP_TUNE);
    }
}

void playClick() {
    if (psu::persist_conf::isClickSoundEnabled()) {
		playTune(CLICK_TUNE);
    }
}

void playShutter() {
    if (psu::persist_conf::isSoundEnabled()) {
		playTune(SHUTTER_TUNE);
    }
}

} // namespace sound
} // namespace eez
